最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、基礎(chǔ)概念

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

主要用途:

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

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

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

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

二、JTW

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

安裝jsonwebtoken

npm install jsonwebtoken

生成token

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

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

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

驗(yàn)證token

語(yǔ)法: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過(guò)期或驗(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:'賬號(hào)或密碼錯(cuò)誤'})
        }
        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: '登錄信息已失效,請(qǐng)重新登錄' })
    }
  } else { 
    res.send({ code: 500, msg: '未攜帶token' })
  }
  
})

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

token獲取個(gè)人信息

  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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 使用NVM實(shí)現(xiàn)不同nodejs版本的自由切換

    使用NVM實(shí)現(xiàn)不同nodejs版本的自由切換

    在工作中,我們可能需要同時(shí)進(jìn)行多個(gè)不同NodeJS版本的項(xiàng)目開發(fā),這種情況下,對(duì)于維護(hù)多個(gè)版本的node將會(huì)是一件非常麻煩的事情,NVM就是為解決這個(gè)問(wèn)題而產(chǎn)生的,本文給出了下載、安裝及使用方法,需要的朋友可以參考下
    2024-02-02
  • 詳解nodejs通過(guò)代理(proxy)發(fā)送http請(qǐng)求(request)

    詳解nodejs通過(guò)代理(proxy)發(fā)送http請(qǐng)求(request)

    本篇文章主要介紹了nodejs通過(guò)代理(proxy)發(fā)送http請(qǐng)求(request),具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-09-09
  • 簡(jiǎn)單好用的nodejs 爬蟲框架分享

    簡(jiǎn)單好用的nodejs 爬蟲框架分享

    使用nodejs開發(fā)爬蟲半年左右了,爬蟲可以很簡(jiǎn)單,也可以很復(fù)雜。簡(jiǎn)單的爬蟲定向爬取一個(gè)網(wǎng)站,可能有個(gè)幾萬(wàn)或者幾十萬(wàn)的頁(yè)面請(qǐng)求,今天給大家介紹這款非常好用的爬蟲框架crawl-pet
    2017-03-03
  • Node+Express搭建HTTPS服務(wù)的實(shí)現(xiàn)

    Node+Express搭建HTTPS服務(wù)的實(shí)現(xiàn)

    最近開發(fā)需要搭建一個(gè)https的服務(wù),正好最近在用nodejs和express,本文章主要介紹了Node+Express搭建HTTPS服務(wù)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • 使用PM2實(shí)現(xiàn)高效的應(yīng)用監(jiān)控與管理功能

    使用PM2實(shí)現(xiàn)高效的應(yīng)用監(jiān)控與管理功能

    PM2?是一個(gè)流行的進(jìn)程管理器,用于?Node.js?應(yīng)用程序,它支持應(yīng)用程序的負(fù)載均衡、自動(dòng)重啟、日志管理、監(jiān)控以及多環(huán)境管理等功能,本文給大家介紹了如何使用PM2實(shí)現(xiàn)高效的應(yīng)用監(jiān)控與管理功能,需要的朋友可以參考下
    2024-02-02
  • 修改Nodejs內(nèi)置的npm默認(rèn)配置路徑方法

    修改Nodejs內(nèi)置的npm默認(rèn)配置路徑方法

    今天小編就為大家分享一篇修改Nodejs內(nèi)置的npm默認(rèn)配置路徑方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 使用node操作SQLite的方法

    使用node操作SQLite的方法

    SQLite是一種輕量級(jí)的嵌入式關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它以庫(kù)的形式存在,可以嵌入到應(yīng)用程序中,使用Node.js操作SQLite數(shù)據(jù)庫(kù)有多種方式,其中常用的方式包括使用sqlite3模塊、sequelize模塊和knex模塊,本文將詳細(xì)的給大家介紹這幾種方式,需要的朋友可以參考下
    2023-10-10
  • node.js中的fs.futimes方法使用說(shuō)明

    node.js中的fs.futimes方法使用說(shuō)明

    這篇文章主要介紹了node.js中的fs.futimes方法使用說(shuō)明,本文介紹了fs.futimes方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • nodejs中fs模塊三種讀寫文件方法的使用區(qū)別

    nodejs中fs模塊三種讀寫文件方法的使用區(qū)別

    Node.js的fs模塊有多種文件操作API,readFile、read、createReadStream讀取文件,writeFile、write、createWriteStream寫入文件,readFile和writeFile將文件寫入緩存區(qū),適合小文件操作,read和write分步驟讀寫,適合大文件,createReadStream和createWriteStream通過(guò)流處理文件
    2024-10-10
  • node如何實(shí)現(xiàn)把包發(fā)布到npm上

    node如何實(shí)現(xiàn)把包發(fā)布到npm上

    這篇文章主要介紹了node如何實(shí)現(xiàn)把包發(fā)布到npm上的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05

最新評(píng)論

深泽县| 福贡县| 崇阳县| 乡城县| 灵武市| 蒙自县| 济宁市| 崇明县| 凤庆县| 栾川县| 罗江县| 长宁县| 贡觉县| 定西市| 延庆县| 天台县| 罗城| 探索| 福建省| 兴业县| 永春县| 民勤县| 绍兴县| 南和县| 阆中市| 英吉沙县| 东辽县| 全椒县| 永修县| 英吉沙县| 依安县| 巴中市| 赤水市| 抚宁县| 安宁市| 梅州市| 宁化县| 呈贡县| 高唐县| 沁源县| 沙河市|