• 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 }),
            })
        })

  • 相关阅读:
    主流的浏览器分别是什么内核?
    css的基本语句构成是什么?
    如何居中一个浮动元素?
    你如何管理CSS文件、JS与图片?
    、在ie6,ie7中元素高度超出自己设置高度。原因是IE8以前的浏览器中会给元素设置默认的行高的高度导致的。
    前端页面有哪三层构成,分别是什么?作用是什么?
    两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
    == 和 equals 的区别是什么?
    JDK 和 JRE 有什么区别?
    2020.10.19
  • 原文地址:https://www.cnblogs.com/wangrui38/p/10368388.html
Copyright © 2020-2023  润新知