node登录生成token并验证的实现
作者:奥特曼
一、基础概念
"token": 是一个通用的术语,指代一种用于表示身份、权限或访问凭证的数据结构。它可以是一个字符串、数字或其他形式的数据。
主要用途:
身份验证:在身份验证过程中,用户提供凭据(如用户名和密码),服务器验证凭据的有效性后会颁发一个身份验证令牌给用户。这个令牌可以是一个长期有效的持久令牌,也可以是一个短期有效的临时令牌,用于后续的请求中证明用户的身份。
授权访问:当用户通过身份验证后,服务器可以颁发一个访问令牌给用户。这个令牌用于证明用户被授予了特定的权限或访问特定资源的权利。用户在后续请求中使用该令牌来访问受保护的资源,服务器会验证令牌的有效性和权限。
API 访问:在应用程序开发中,API 令牌通常用于授权第三方应用程序或服务来访问特定的 API。开发者向 API 提供商注册应用程序,并获得一个 API 令牌,以便在应用程序中进行身份验证和授权,以访问和使用 API 提供的功能和数据。
简单来说,就是本次登录的一个凭证,只要你带着服务器端返回来的token你就可以访问当前相对应的内容(具体还需要服务端来定)。
二、JTW
token本身就是一个加密字符串,但是由自己生成需要考虑到安全性、加密算法等,但我们可以使用插件 例如jsonwebtoken就可以帮助我们token并验证。
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验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!