node.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > node.js > node登录生成token验证

node登录生成token并验证的实现

作者:奥特曼

token校验作为项目里的必要项,其重要性不言而喻,本文主要介绍了node登录生成token并验证的实现,具有一定的参考价值,感兴趣的可以了解一下

一、基础概念

"token": 是一个通用的术语,指代一种用于表示身份、权限或访问凭证的数据结构。它可以是一个字符串、数字或其他形式的数据。

主要用途:

简单来说,就是本次登录的一个凭证,只要你带着服务器端返回来的token你就可以访问当前相对应的内容(具体还需要服务端来定)。

二、JTW

token本身就是一个加密字符串,但是由自己生成需要考虑到安全性、加密算法等,但我们可以使用插件 例如jsonwebtoken就可以帮助我们token并验证。

安装jsonwebtoken

npm install jsonwebtoken

生成token

语法:JWT.sign(数据,加密字符串, 时间)  

const JWT = require("../../utils/JWT.js")

let token = JWT.sign({ username:'奥特曼',id:123 },'secret', '1day')

验证token

语法:jwt.verify(生成的token,加密字符串)

jwt.verify(token,'secret')

三、实践

封装

const jwt = require('jsonwebtoken')
const secret = "ultraman"//解密密钥

const JWT = {
    createToken: (data,time) => { 
        return jwt.sign(data,secret,{expiresIn:time})
    },
    verifyToken: (token) => { 
    // 如果token过期或验证失败,将返回false
       try {
        return jwt.verify(token,secret)
       } catch (error) {
        return false
       }
    }
}

module.exports = JWT

登录接口

 login: async (req, res, next) => { 
        var result = await UserService.login(req.body)
        if (result.length) {
            // 生成token
            const DeepRes = JSON.parse(JSON.stringify(result[0])) 
            delete DeepRes.password
            let token = JWT.createToken({ username: req.body.username,id:result[0]._id }, '1day')
            res.header('Authorization', token)
            res.send({code:200,msg:'登录成功',data:{token,userInfo:DeepRes}})
        } else {
            res.send({code:500,msg:'账号或密码错误'})
        }
        console.log(result,'登陆了');
    },

验证拦截

验证中用了截取,采用了Bearer  xxxx 的形式,所以做了截取只保留token部分进行验证。

app.use((req, res, next) => {  
  if (whiteList.includes(req.path)) return next()

  let token = req.get('Authorization')
  if (token) {
    const result = JWT.verifyToken(token.split(' ')[1])
    if (result) {
      next()
    } else {
      res.status(401).send({ code: 401, msg: '登录信息已失效,请重新登录' })
    }
  } else { 
    res.send({ code: 500, msg: '未携带token' })
  }
  
})

验证后会把数据返回出来,就可以当时生成token传过去的数据,有了数据那么我们就可以自行获取用户信息

token获取个人信息

  getUserInfo: async (req, res, next) => { 
        let token = req.get('Authorization')
        const info = JWT.verifyToken(token.split(' ')[1])
       const userInfo =  await UserService.getProfile(info.id)
        console.log(userInfo, 'userInfo');
        res.send({code:200,msg:'获取成功',data:{userInfo:userInfo[0]}})
    }

到此这篇关于node登录生成token并验证的实现的文章就介绍到这了,更多相关node登录生成token验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:
阅读全文