node中token的生成與解析配置
在用戶登錄成功之后為了記錄用戶的登錄狀態(tài)通常會將用戶信息編寫為一個token,通過解析token判斷用戶是否登錄。
token的生成
JSON Web Token(JWT) 是一種基于JSON的輕量級身份驗證和授權(quán)機制。它是一種開放標準(RFC 7519),用于在網(wǎng)絡(luò)應(yīng)用中傳遞聲明。
1 安裝
npm i jsonwebtoken
2 引入jwt
const jwt = require("jsonwebtoken");3 使用jwt,生成token
const jwt = require("jsonwebtoken");
// 獲取secret秘鑰
const config = require("../config.js");
const expiresIn = '1h' // token有效期
// 對用戶信息進行加密 生成token
const generateToken = (user) => {
const token = jwt.sign(
{
user_id: user.id,
role: user.role,
},
config.SECRET_KEY,
{ expiresIn:expiresIn }
);
return 'Bearer ' + token;
};4 對用戶信息進行token化處理 對用戶信息處理的時候,推薦將用戶密碼與頭像信息去掉
// 登錄
exports.login = (req, res) => {
const userinfo = req.body;
if (!userinfo.username || !userinfo.password) {
return res.send({
message: "用戶名或者密碼不能為空!",
status: 0,
});
}
const sqlStr = `select * from user where username=?`;
db.query(sqlStr, [userinfo.username], (err, results) => {
if (err) {
res.handleResult(err.message);
} else if (results.length > 0) {
const password = results[0].password;
const isExit = bcrypt.compareSync(userinfo.password, password);
if (isExit) {
// 對用戶信息處理的時候,推薦將用戶密碼與頭像信息去掉
const user = { ...results[0], password: "", avatar: "" };
// 生成token
const token = generateToken(user);
res.handleResult("登錄成功!", 0,token);
} else {
res.handleResult("密碼不正確!");
}
} else {
res.handleResult("用戶不存在!");
}
});
};
解析token
1 安裝
npm i express-jwt@5.3.3
2 引入expressJWT
const expressJWT = require("express-jwt");3 使用expressJWT,解析token 需要注意的是token解析配置,必須在路由配置前設(shè)置
const expressJWT = require('express-jwt')
const config = require('./config')
// 配置token解析
// unless中的path 除了這個地址,其他的URL都需要驗證token
app.use(expressJWT({secret: config.SECRET_KEY}).unless({path: ['/api/login'] }));
問題描述
在使用express-jwt的過程中遇到了如下問題

該問題由 6.0.0 版本 更改引起。
方案一: 配置algorithms參數(shù)
在提供第三方庫作為機密時,需要 algorithms 參數(shù)來防止?jié)撛诘慕导壒簟?/p>
expressJwt({ secret: config.SECRET_KEY, algorithms: ['RS256'] });方案二: 降低express-jwt的版本
npm i express-jwt@5.3.3
到此這篇關(guān)于node中token的生成與解析配置的文章就介紹到這了,更多相關(guān)node token生成內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React和Node.js快速上傳進度條功能實現(xiàn)
這篇文章主要為大家介紹了React和Node.js快速上傳進度條功能實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
Node.js設(shè)置CORS跨域請求中多域名白名單的方法
這篇文章主要介紹了Node.js設(shè)置CORS跨域請求中多域名白名單的方法,文中通過示例代碼介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03

