欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

node登錄生成token并驗(yàn)證的實(shí)現(xiàn)

 更新時間:2024年02月26日 10:56:00   作者:奧特曼  
token校驗(yàn)作為項(xiàng)目里的必要項(xiàng),其重要性不言而喻,本文主要介紹了node登錄生成token并驗(yàn)證的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下

一、基礎(chǔ)概念

"token": 是一個通用的術(shù)語,指代一種用于表示身份、權(quán)限或訪問憑證的數(shù)據(jù)結(jié)構(gòu)。它可以是一個字符串、數(shù)字或其他形式的數(shù)據(jù)。

主要用途:

  • 身份驗(yàn)證:在身份驗(yàn)證過程中,用戶提供憑據(jù)(如用戶名和密碼),服務(wù)器驗(yàn)證憑據(jù)的有效性后會頒發(fā)一個身份驗(yàn)證令牌給用戶。這個令牌可以是一個長期有效的持久令牌,也可以是一個短期有效的臨時令牌,用于后續(xù)的請求中證明用戶的身份。

  • 授權(quán)訪問:當(dāng)用戶通過身份驗(yàn)證后,服務(wù)器可以頒發(fā)一個訪問令牌給用戶。這個令牌用于證明用戶被授予了特定的權(quán)限或訪問特定資源的權(quán)利。用戶在后續(xù)請求中使用該令牌來訪問受保護(hù)的資源,服務(wù)器會驗(yàn)證令牌的有效性和權(quán)限。

  • API 訪問:在應(yīng)用程序開發(fā)中,API 令牌通常用于授權(quán)第三方應(yīng)用程序或服務(wù)來訪問特定的 API。開發(fā)者向 API 提供商注冊應(yīng)用程序,并獲得一個 API 令牌,以便在應(yīng)用程序中進(jìn)行身份驗(yàn)證和授權(quán),以訪問和使用 API 提供的功能和數(shù)據(jù)。

簡單來說,就是本次登錄的一個憑證,只要你帶著服務(wù)器端返回來的token你就可以訪問當(dāng)前相對應(yīng)的內(nèi)容(具體還需要服務(wù)端來定)。

二、JTW

token本身就是一個加密字符串,但是由自己生成需要考慮到安全性、加密算法等,但我們可以使用插件 例如jsonwebtoken就可以幫助我們token并驗(yàn)證。

安裝jsonwebtoken

npm install jsonwebtoken

生成token

語法:JWT.sign(數(shù)據(jù),加密字符串, 時間)  

const JWT = require("../../utils/JWT.js")

let token = JWT.sign({ username:'奧特曼',id:123 },'secret', '1day')

驗(yàn)證token

語法:jwt.verify(生成的token,加密字符串)

jwt.verify(token,'secret')

三、實(shí)踐

封裝

const jwt = require('jsonwebtoken')
const secret = "ultraman"http://解密密鑰

const JWT = {
    createToken: (data,time) => { 
        return jwt.sign(data,secret,{expiresIn:time})
    },
    verifyToken: (token) => { 
    // 如果token過期或驗(yàn)證失敗,將返回false
       try {
        return jwt.verify(token,secret)
       } catch (error) {
        return false
       }
    }
}

module.exports = JWT

登錄接口

 login: async (req, res, next) => { 
        var result = await UserService.login(req.body)
        if (result.length) {
            // 生成token
            const DeepRes = JSON.parse(JSON.stringify(result[0])) 
            delete DeepRes.password
            let token = JWT.createToken({ username: req.body.username,id:result[0]._id }, '1day')
            res.header('Authorization', token)
            res.send({code:200,msg:'登錄成功',data:{token,userInfo:DeepRes}})
        } else {
            res.send({code:500,msg:'賬號或密碼錯誤'})
        }
        console.log(result,'登陸了');
    },

驗(yàn)證攔截

驗(yàn)證中用了截取,采用了Bearer  xxxx 的形式,所以做了截取只保留token部分進(jìn)行驗(yàn)證。

app.use((req, res, next) => {  
  if (whiteList.includes(req.path)) return next()

  let token = req.get('Authorization')
  if (token) {
    const result = JWT.verifyToken(token.split(' ')[1])
    if (result) {
      next()
    } else {
      res.status(401).send({ code: 401, msg: '登錄信息已失效,請重新登錄' })
    }
  } else { 
    res.send({ code: 500, msg: '未攜帶token' })
  }
  
})

驗(yàn)證后會把數(shù)據(jù)返回出來,就可以當(dāng)時生成token傳過去的數(shù)據(jù),有了數(shù)據(jù)那么我們就可以自行獲取用戶信息

token獲取個人信息

  getUserInfo: async (req, res, next) => { 
        let token = req.get('Authorization')
        const info = JWT.verifyToken(token.split(' ')[1])
       const userInfo =  await UserService.getProfile(info.id)
        console.log(userInfo, 'userInfo');
        res.send({code:200,msg:'獲取成功',data:{userInfo:userInfo[0]}})
    }

到此這篇關(guān)于node登錄生成token并驗(yàn)證的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)node登錄生成token驗(yàn)證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評論