4.加密与token(node+express)

一. 敏感数据加密
1.安装并引入中间件
    npm install utility
    const utils = require('utility')
2.加密方法
    function md5Pwd(pwd) {
        const salt = 'sensetime_is_good_5589x321yza67.!@#IUHJh~~'
        return utils.md5(utils.md5(pwd + salt))
    }
3.登录注册均调用 md5Pwd()
    例如:
        User.findOne({
            user,
            pwd: md5Pwd(pwd)
        }

二. Token
1.安装并引入中间件
    npm install express-jwt
    npm install jsonwebtoken
    const expressJWT = require('express-jwt')
    const jwt = require('jsonwebtoken')
2.设置API白名单
    const expressJWT = require('express-jwt')
    const secretOrPrivateKey = "SENSETIMEencipherment 1895@#$%^&*_" // 密钥
    app.use(expressJWT({
        secret: secretOrPrivateKey
    }).unless({
        path: ['/user/login','/user/register'] //白名单
    }))
3.验证token
    app.use(function(err, req, res, next) {
        if (err.name === 'UnauthorizedError') {
            res.status(401)
            return res.json({
                code: -1,
                message: 'token已过期'
            })
        }
        if (err.name === 'TokenExpiredError') {
            res.status(401)
            return res.json({
                code: -2,
                message: '没有token'
            })
        }
    })
4.获取token
    Router.post('/login', function(req, res) {
        // ... 这里写查询数据库的代码

        /*
        * 登录成功后返回的数据:
        * username用户名,String ,
        * userinfo用户信息,Object ,
        * authority菜单权限,Array
        **/
        res.json({
            result: 'ok',
            data:{ userinfo, authority},
            token: jwt.sign( { name: username }, secretOrPrivateKey, { expiresIn: 60 * 60 * 24 * 7 }),
        })
    })

猜你喜欢

转载自www.cnblogs.com/wangrui38/p/10368388.html