zoukankan      html  css  js  c++  java
  • node 登陆拦截中间件(egg)

    middleware/jwt.js
    
    'use strict';
    
    module.exports = (options, app) => {
        return async function userInterceptor(ctx, next) {
            //获取token 获取前端或以其他方式设置的cookie需要设置signed: false属性,避免对它做验签导致获取不到 cookie 的值。
            let token = ctx.cookies.get('Admin-Token', { signed: false });
            //验证token是否为空
            if (token){
                let result = ctx.verifyToken(token) //解密token
                let {_id} = result //检查是否有用户_id
                //验证客户端token是否合法
                if (_id) {
                    let redis_token = await app.redis.get(_id) // 获取redis中的token
                    //验证是否为最新的token
                    if (token === redis_token) {
                        await next();
                    }else{
                        // 如果不是最新token,则代表用户在另一个机器上进行操作,需要用户重新登录保存最新token
                        ctx.body = {
                            code: 402,
                            msg: '您的账号已在其他机器保持登录,如果继续将清除其他机器的登录状态'
                        }
                    }
                }else{
                    // 如果token不合法,则代表客户端token已经过期或者不合法(伪造token)
                    ctx.body = {
                        code: 401,
                        msg: '您的登录状态已过期,请重新登录'
                    }
                }
            }else{
                // 如果token为空,则代表客户没有登录
                ctx.body = {
                    code: 401,
                    msg: '您还没有登录,请登陆后再进行操作'
                }
            }
        };
    }
    
    愿你走出半生,归来仍是少年
  • 相关阅读:
    (转)史上最全的程序员求职渠道总结
    位置无关码 位置相关码
    家用小感冒药方
    w7安装双系统
    vs2010安装的一些问题
    血红蛋白值的临床意义(hemoglobin ,Hb,HGB)
    小样式
    第一章:认识Yii
    2016该不该买房
    PHP函数处理函数实例详解
  • 原文地址:https://www.cnblogs.com/yz-blog/p/14314026.html
Copyright © 2011-2022 走看看