亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

node.js實(shí)現(xiàn)token身份驗(yàn)證的示例代碼

 更新時間:2022年02月09日 09:09:47   作者:蘿卜砸大坑  
本文主要介紹了node.js實(shí)現(xiàn)token身份驗(yàn)證的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

安裝依賴 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)文章

最新評論