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)文章
Node.JS利用PhantomJs抓取網(wǎng)頁入門教程
現(xiàn)今,網(wǎng)頁抓取已經(jīng)是一種人所共知的技術(shù)了,然而依然存在著諸多復雜性,下面這篇文章主要給大家介紹了Node.JS利用PhantomJs抓取網(wǎng)頁的方法教程,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05
node?NPM庫promise?異步任務(wù)狀態(tài)管理
這篇文章主要介紹了node?NPM庫promise?異步任務(wù)狀態(tài)管理2023-07-07
vscode+nodejs+express搭建一個簡單網(wǎng)站(附詳細圖文教程)
作為前端開發(fā),Nodejs已經(jīng)成了很多公司對我們這一崗位的硬性要求,而Express框架則是其中知名度最高、也是最受歡迎的Nodejs開發(fā)框架,這篇文章主要介紹了vscode+nodejs+express搭建一個簡單網(wǎng)站的相關(guān)資料,需要的朋友可以參考下2026-01-01
Nodejs如何進行性能監(jiān)控和分析優(yōu)化
Node.js應(yīng)用可能因為高并發(fā)、內(nèi)存泄漏、CPU密集型任務(wù)等原因?qū)е滦阅芟陆?影響用戶體驗甚至系統(tǒng)穩(wěn)定性,通過性能監(jiān)控和分析,我們可以及時發(fā)現(xiàn)潛在問題,并針對性地進行優(yōu)化,確保系統(tǒng)正常運行且具備良好的性能表現(xiàn)2024-06-06

