美文网首页
全局拦截与登陆校验

全局拦截与登陆校验

作者: 是新来的啊强呀 | 来源:发表于2020-05-09 11:59 被阅读0次

    功能1:用户未登录的情况下,无法进行加入购物车,无法进行相关操作
    功能2:登陆过后,刷新页面,还能保持登陆信息。添加登陆校验,即通过访问cookie,获取userName和userId。

    全局拦截,在server/app.js中添加白名单,登陆登出不拦截,获取商品列表不拦截

    app.use(function (req,res,next){
      if(req.cookies.userId){  // 判断是否登陆
        next();  // 继续往后走,用户已经登陆,不拦截
      }else{
        // 定义白名单,即什么不拦截,req.originalUrl.indexOf('/goods/list')>-1可以换成=》req.path=='/goods/list'
        console.log(`path:${req.path},originalUrl:${req.originalUrl}`);
        if(req.originalUrl=='/users/login' || req.originalUrl=='/users/logout' || req.originalUrl.indexOf('/goods/list')>-1){
          next();  // 如果点击的是登陆或登出,则不拦截它
        }else{
          // 未登录时,点击未加入白名单的按钮,会返回未登录提示信息
          res.json({
            status:'10001',
            msg:'当前未登录',
            result:''
          });
        }
      }
    })
    

    登陆校验,server/routes/users.js中添加登陆校验接口

    // 登陆校验接口
    router.get('/checkLogin', function (req,res,next) {
      if(req.cookies.userId){
        res.json({
          status:'0',
          msg:'',
          result:req.cookies.userName || ''  //  第一次没有登陆的情况不存在userName故返回空
        });
      }else{
        res.json({
          status:'1',
          msg:'未登录',
          result:''
        });
      }
    })
    
    // 前端,添加登陆校验方法
    mounted(){
          this.checkLogin();
       },
    methods:{
        checkLogin(){
              axios.get('/users/checkLogin').then((response)=>{
                let res = response.data;
                if(res.status == '0'){
                  this.nickName = res.result;
                }
              });
            }
    }
    

    相关文章

      网友评论

          本文标题:全局拦截与登陆校验

          本文链接:https://www.haomeiwen.com/subject/fbmfnhtx.html