node中token的生成與解析配置
在用戶登錄成功之后為了記錄用戶的登錄狀態(tài)通常會(huì)將用戶信息編寫(xiě)為一個(gè)token,通過(guò)解析token判斷用戶是否登錄。
token的生成
JSON Web Token(JWT) 是一種基于JSON的輕量級(jí)身份驗(yàn)證和授權(quán)機(jī)制。它是一種開(kāi)放標(biāo)準(zhǔ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有效期
// 對(duì)用戶信息進(jìn)行加密 生成token
const generateToken = (user) => {
const token = jwt.sign(
{
user_id: user.id,
role: user.role,
},
config.SECRET_KEY,
{ expiresIn:expiresIn }
);
return 'Bearer ' + token;
};4 對(duì)用戶信息進(jìn)行token化處理 對(duì)用戶信息處理的時(shí)候,推薦將用戶密碼與頭像信息去掉
// 登錄
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) {
// 對(duì)用戶信息處理的時(shí)候,推薦將用戶密碼與頭像信息去掉
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 除了這個(gè)地址,其他的URL都需要驗(yàn)證token
app.use(expressJWT({secret: config.SECRET_KEY}).unless({path: ['/api/login'] }));
問(wèn)題描述
在使用express-jwt的過(guò)程中遇到了如下問(wèn)題

該問(wèn)題由 6.0.0 版本 更改引起。
方案一: 配置algorithms參數(shù)
在提供第三方庫(kù)作為機(jī)密時(shí),需要 algorithms 參數(shù)來(lái)防止?jié)撛诘慕导?jí)攻擊。
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Egret引擎開(kāi)發(fā)指南之創(chuàng)建項(xiàng)目
Egret Engine(白鷺引擎)是一款使用TypeScript語(yǔ)言構(gòu)建的開(kāi)源免費(fèi)的移動(dòng)游戲引擎。白鷺引擎的核心定位是開(kāi)放,高效,優(yōu)雅。通過(guò)它,你可以快速地創(chuàng)建HTML5類(lèi)型的移動(dòng)游戲,也可以將游戲項(xiàng)目編譯輸出成為目標(biāo)移動(dòng)平臺(tái)的原生游戲應(yīng)用。2014-09-09
Node.js中的緩存機(jī)制:原理與應(yīng)用詳解
本文將深入探討緩存機(jī)制在 Node.js 中的應(yīng)用,包括其原理、實(shí)現(xiàn)方式和最佳實(shí)踐,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
Node.JS利用PhantomJs抓取網(wǎng)頁(yè)入門(mén)教程
現(xiàn)今,網(wǎng)頁(yè)抓取已經(jīng)是一種人所共知的技術(shù)了,然而依然存在著諸多復(fù)雜性,下面這篇文章主要給大家介紹了Node.JS利用PhantomJs抓取網(wǎng)頁(yè)的方法教程,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-05-05
node?NPM庫(kù)promise?異步任務(wù)狀態(tài)管理
這篇文章主要介紹了node?NPM庫(kù)promise?異步任務(wù)狀態(tài)管理2023-07-07
vscode+nodejs+express搭建一個(gè)簡(jiǎn)單網(wǎng)站(附詳細(xì)圖文教程)
作為前端開(kāi)發(fā),Nodejs已經(jīng)成了很多公司對(duì)我們這一崗位的硬性要求,而Express框架則是其中知名度最高、也是最受歡迎的Nodejs開(kāi)發(fā)框架,這篇文章主要介紹了vscode+nodejs+express搭建一個(gè)簡(jiǎn)單網(wǎng)站的相關(guān)資料,需要的朋友可以參考下2026-01-01
Nodejs如何進(jìn)行性能監(jiān)控和分析優(yōu)化
Node.js應(yīng)用可能因?yàn)楦卟l(fā)、內(nèi)存泄漏、CPU密集型任務(wù)等原因?qū)е滦阅芟陆?影響用戶體驗(yàn)甚至系統(tǒng)穩(wěn)定性,通過(guò)性能監(jiān)控和分析,我們可以及時(shí)發(fā)現(xiàn)潛在問(wèn)題,并針對(duì)性地進(jìn)行優(yōu)化,確保系統(tǒng)正常運(yùn)行且具備良好的性能表現(xiàn)2024-06-06

