首頁 > 軟體

node.js實現token身份驗證的範例程式碼

2022-02-09 10:00:31

安裝依賴 express-jwt

npm i express-jwt

將token校驗相關資料匯入組態檔

// setting.js
module.exports = {
    token: {
        // token金鑰
        signKey: 'blog_globM_token_key_$$$$',
        // 過期時間
        signTime: 3600 * 24 * 3,
        // 請求頭引數
        header: 'authorization',
        // 不用校驗的路由
        unRoute: [
            { url: '/login', methods: ['POST']},
            { url: '/register', methods: ['POST']}
        ]
    }
}

token組態檔(加密/解密)

// verify.js
const jwt = require('jsonwebtoken')
const setting = require('../setting')

const verify = {
    // 設定token
    setToken(email,_id){
        return new Promise(resolve => {
            let token = jwt.sign(
                // 儲存資料,自定義
                { email,_id },
                // 金鑰
                setting.token.signKey,
                // 過期時間
                { expiresIn: setting.token.signTime}
            )
            resolve(token)
        })
    },
    getToken(token){
        return new Promise((resolve, reject) => {
            // 判斷token是否存在,這裡是根據空格分割
            if(!token.split(' ').length){
                reject({error: 'The token value is empty'})
            }else{
                // 解密token並返回資料
                let data = jwt.verify(token.split(' ')[1],setting.token.signKey)
                resolve(data)
            }
        })
    }
}

module.exports = verify

主檔案匯入(app.js)

const expressJwt = require('express-jwt')
// 匯入組態檔
const setting = require('./setting')
// 匯入token校驗檔案
const verify = require('./public/verify')

// 解析token獲取使用者資訊
app.use((req, res, next) => {
    // 獲取請求頭中的引數
    let token = req.headers[setting.token.header]
    if(token === undefined){
        return next()
    }else{
        // token校驗並將校驗結果儲存至請求頭中
        verify.getToken(token).then(data => {
            req.data = data
            return next()
        }).catch(_ =>{
            return next()
        })
    }
})
//驗證token是否過期並規定哪些路由不用驗證
app.use(expressJwt({
    secret: setting.token.signKey
}).unless({
    //除了這個地址,其他的URL都需要驗證
    path: setting.token.unRoute 
}))
//當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 資料儲存在req.data中
response.author = req.data._id

介面呼叫
headers 中傳參,key: Authorization,value: 'Bearer ’ + token
Authorization : 'Bearer ’ + token

// axios
config.headers['Authorization'] = 'Bearer ' + token

到此這篇關於node.js實現token身份驗證的範例程式碼的文章就介紹到這了,更多相關node.js token身份驗證內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com