node.js實(shí)現(xiàn)token身份驗(yàn)證的示例代碼
安裝依賴 express-jwt
npm i express-jwt
將token校驗(yàn)相關(guān)數(shù)據(jù)導(dǎo)入配置文件
// setting.js module.exports = { ? ? token: { ? ? ?? ?// token密鑰 ? ? ? ? signKey: 'blog_globM_token_key_$$$$', ? ? ? ? // 過期時間 ? ? ? ? signTime: 3600 * 24 * 3, ? ? ? ? // 請求頭參數(shù) ? ? ? ? header: 'authorization', ? ? ? ? // 不用校驗(yàn)的路由 ? ? ? ? unRoute: [ ? ? ? ? ? ? { url: '/login', methods: ['POST']}, ? ? ? ? ? ? { url: '/register', methods: ['POST']} ? ? ? ? ] ? ? } }
token配置文件(加密/解密)
// verify.js const jwt = require('jsonwebtoken') const setting = require('../setting') const verify = { ?? ?// 設(shè)置token ? ? setToken(email,_id){ ? ? ? ? return new Promise(resolve => { ? ? ? ? ? ? let token = jwt.sign( ? ? ? ? ? ? ?? ?// 存儲數(shù)據(jù),自定義 ? ? ? ? ? ? ? ? { email,_id }, ? ? ? ? ? ? ? ? // 密鑰 ? ? ? ? ? ? ? ? setting.token.signKey, ? ? ? ? ? ? ? ? // 過期時間 ? ? ? ? ? ? ? ? { expiresIn: setting.token.signTime} ? ? ? ? ? ? ) ? ? ? ? ? ? resolve(token) ? ? ? ? }) ? ? }, ? ? getToken(token){ ? ? ? ? return new Promise((resolve, reject) => { ? ? ? ? ?? ?// 判斷token是否存在,這里是根據(jù)空格分割 ? ? ? ? ? ? if(!token.split(' ').length){ ? ? ? ? ? ? ? ? reject({error: 'The token value is empty'}) ? ? ? ? ? ? }else{ ? ? ? ? ? ? ?? ?// 解密token并返回?cái)?shù)據(jù) ? ? ? ? ? ? ? ? let data = jwt.verify(token.split(' ')[1],setting.token.signKey) ? ? ? ? ? ? ? ? resolve(data) ? ? ? ? ? ? } ? ? ? ? }) ? ? } } module.exports = verify
主文件導(dǎo)入(app.js)
const expressJwt = require('express-jwt') // 導(dǎo)入配置文件 const setting = require('./setting') // 導(dǎo)入token校驗(yàn)文件 const verify = require('./public/verify') // 解析token獲取用戶信息 app.use((req, res, next) => { ?? ?// 獲取請求頭中的參數(shù) ? ? let token = req.headers[setting.token.header] ? ? if(token === undefined){ ? ? ? ? return next() ? ? }else{ ? ? ?? ?// token校驗(yàn)并將校驗(yàn)結(jié)果保存至請求頭中 ? ? ? ? verify.getToken(token).then(data => { ? ? ? ? ? ? req.data = data ? ? ? ? ? ? return next() ? ? ? ? }).catch(_ =>{ ? ? ? ? ? ? return next() ? ? ? ? }) ? ? } }) //驗(yàn)證token是否過期并規(guī)定哪些路由不用驗(yàn)證 app.use(expressJwt({ ? ? secret: setting.token.signKey }).unless({ ? ? //除了這個地址,其他的URL都需要驗(yàn)證 ? ? path: setting.token.unRoute? })) //當(dāng)token失效返回提示信息 app.use((err, req, res, next) => { ? ? if (err.status === 401) { ? ? ? ? return res.status(err.status).json({ ? ? ? ? ? ? status: err.status, ? ? ? ? ? ? msg: 'The token is invalid', ? ? ? ? ? ? error: err.name + ':' + err.message ? ? ? ? }) ? ? } })
接口中使用
const verify = require('../public/verify') const setting = require('../setting') // 生成token verify.setToken(response.email,userData._id).then(token => { ? ? return res.json({ ? ? ? ? status:0, ? ? ? ? msg:'success', ? ? ? ? token, ? ? ? ? signTime: setting.token.signTime ? ? }) })
// token 數(shù)據(jù)存儲在req.data中 response.author = req.data._id
接口調(diào)用
headers 中傳參,key: Authorization,value: 'Bearer ’ + token
Authorization : 'Bearer ’ + token
// axios config.headers['Authorization'] = 'Bearer ' + token
到此這篇關(guān)于node.js實(shí)現(xiàn)token身份驗(yàn)證的示例代碼的文章就介紹到這了,更多相關(guān)node.js token身份驗(yàn)證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Node Mongoose用法詳解【Mongoose使用、Schema、對象、model文檔等】
這篇文章主要介紹了Node Mongoose用法,結(jié)合實(shí)例形式分析了Mongoose使用、Schema、對象、model文檔等基本原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-05-05Node.js API詳解之 string_decoder用法實(shí)例分析
這篇文章主要介紹了Node.js API詳解之 string_decoder用法,結(jié)合實(shí)例形式分析了Node.js API中string_decoder的功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04Windows部署NVM并下載多版本Node.js的方法(含刪除原有Node的方法)
這篇文章主要介紹了Windows部署NVM并下載多版本Node.js的方法(含刪除原有Node的方法),文中通過圖文結(jié)合的方式講解的非常詳細(xì),對大家了解Node.js有一定的幫助,需要的朋友可以參考下2025-01-01Node.js(v16.13.2版本)安裝及環(huán)境配置的圖文教程
本文主要介紹了Node.js(v16.13.2版本)安裝及環(huán)境配置的圖文教程,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05Windows系統(tǒng)下載、部署Node.js與npm環(huán)境的操作方法
本文介紹在Windows電腦中,下載、安裝并配置Node.js環(huán)境與npm包管理工具的方法,文中通過圖文結(jié)合的方式講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2025-01-01node.js使用mongoose操作數(shù)據(jù)庫實(shí)現(xiàn)購物車的增、刪、改、查功能示例
這篇文章主要介紹了node.js使用mongoose操作數(shù)據(jù)庫實(shí)現(xiàn)購物車的增、刪、改、查功能,結(jié)合實(shí)例形式詳細(xì)分析了node.js使用mongoose框架操作MongoDB數(shù)據(jù)實(shí)現(xiàn)購物車增刪改查相關(guān)技巧與使用注意事項(xiàng),需要的朋友可以參考下2019-12-12