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

Node登錄權(quán)限驗證token驗證實現(xiàn)的方法示例

 更新時間:2020年05月25日 10:25:21   作者:meijuna  
這篇文章主要介紹了Node登錄權(quán)限驗證token驗證實現(xiàn)的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1. token的使用場景

  • 無狀態(tài)請求
  • 保持用戶的登錄狀態(tài)
  • 第三方登錄(token+auth2.0)

2. 基于token的驗證原理

后端不再存儲認證信息,而是在用戶登錄的時候生成一個token,然后返回給前端,前端進行存儲,在需要進行驗證的時候?qū)oken一并發(fā)送到后端,后端進行驗證

加密的方式:對稱加密和非對稱加密,對稱加密指的是加密解密使用同一個密鑰,非對稱加密使用公鑰和私鑰,加密用私鑰加密,解密用公鑰解密

3. 基于Token的身份驗證的過程如下:

客戶端:用戶名和密碼請求登錄

服務(wù)器:收到請求,驗證用戶名和密碼,驗證成功后,分發(fā)一個Token返回給客戶端

客戶端:將Token存儲,例如放在 Cookie 里或者 Local Storage 里,后續(xù)每次請求,帶上此Token

服務(wù)器:收到請求,驗證Token是否正確,驗證成功返回請求數(shù)據(jù)

4. node + jwt(jsonwebtoken) 搭建token身份驗證

安裝 ActivePerl https://www.activestate.com/activeperl/downloads或本地下載地址:http://www.fzitv.net/softs/27286.html

安裝 OpenSSl http://slproweb.com/products/Win32OpenSSL.html或本地下載地址: http://www.fzitv.net/softs/561776.html

在 ras 文件 終端夾下輸入 openssl

生成私鑰

openssl> genrsa -out ./private_key.pem 1024 

生成公鑰

openssl> rsa -in ./private_key.pem -pubout -out ./public_key.pem

下載包 jsonwebtoken

npm i jsonwebtoken -D         // 安裝jsonwebtoken模塊
const jwt = require('jsonwebtoken'); //引入包

通過私鑰生成 token,發(fā)送給前端

let private_key=fs.readFileSync(path.join(__dirname,'./private_key.pem'))
var token = jwt.sign(palyload, private_key,{ algorithm: 'RS256'});

后端接收 token 驗證是否有 token,沒有則生成

前端把 token 存再 localStorage 或者 cookie 里

$.ajax({
   url:'http://localhost:3000/login',
   data: {
    username:username.value,
    password:password.value,
    // token:localStorage.getItem('token')
    token: cookieUtil('token')
   },
   method: "POST",
   success ( res ) {
    // const result = JSON.parse( res );
    const result = JSON.parse(res);
    console.log( result );
    if(result.auth){
     // localStorage.setItem('token', result.auth);
     cookieUtil('token', result.auth );
    }
   }
  })
 }

下次前端發(fā)送代 token 數(shù)據(jù)的請求

后端 使用公鑰 token驗證( token解密 )

 // token驗證( token解密 )
 
fs.readFile(path.join(__dirname,'../rsa/public_key.pem'),'utf8',(error,public_doc) =>{
  if( error ) throw error 
  var deencode = jwt.verify( jwt_token, public_doc )
})

完整代碼

const express = require('express');

const jwt = require('jsonwebtoken');
const path = require( 'path' );
const fs = require( 'fs' );

const router = new express.Router();

router.post('/', (req, res, next) => {

 
 const { username, password,token } = req.body;

  //讀取生成的私鑰文件
  let private_key = fs.readFileSync(path.join(__dirname,'../rsa/private_key.pem'));
 
  if(!token) { //生成的 token 唯一的,所以第一次沒有 koen 或者 token 過期是時才生成 token
    
   
   var jwt_token = jwt.sign({ username, password }, 
               private_key,
               { algorithm: 'RS256'} );
    
     // 公鑰解密 前端傳來的 token 
  
fs.readFile(path.join(__dirname,'../rsa/public_key.pem'),'utf8'(error,public_doc) =>{
     if( error ) throw error 
     var deencode = jwt.verify( jwt_token, public_doc )
     console.log(deencode );
    })

   res.render('login', {
    data: JSON.stringify({
     auth: jwt_token, //把生成的jwt 發(fā)給前端
     status: 1   //0 失敗, 1 登錄成功 2 登錄重復(fù)
    })
   })
  } else { //前端發(fā)來的 token 有值,說明是第二次登錄了或者token沒有過期,不用再生成 token 了
    res.render('login',{
    data: JSON.stringify({
     message: '登錄成功',
     status: 1 //0 失敗, 1 登錄成功 2 登錄重復(fù)
    })
    })
  } 
})

module.exports = router;

到此這篇關(guān)于Node登錄權(quán)限驗證token驗證實現(xiàn)的方法示例的文章就介紹到這了,更多相關(guān)Node登錄權(quán)限驗證token驗證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • NodeJS遍歷文件生產(chǎn)文件列表功能示例

    NodeJS遍歷文件生產(chǎn)文件列表功能示例

    這篇文章主要介紹了NodeJS遍歷文件生產(chǎn)文件列表功能,結(jié)合實例形式分析了nodejs針對文件與目錄的遍歷、判斷及讀寫等相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • node.js學(xué)習(xí)之?dāng)嘌詀ssert的使用示例

    node.js學(xué)習(xí)之?dāng)嘌詀ssert的使用示例

    assert 模塊主要用于編寫程序的單元測試時使用,通過斷言可以提早發(fā)現(xiàn)和排查出錯誤。下面這篇文章主要給大家介紹了關(guān)于node.js學(xué)習(xí)之?dāng)嘌詀ssert的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • 命令行批量截圖Node腳本示例代碼

    命令行批量截圖Node腳本示例代碼

    這篇文章主要給大家介紹了關(guān)于命令行批量截圖Node腳本的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • node.js入門學(xué)習(xí)之url模塊

    node.js入門學(xué)習(xí)之url模塊

    最近在學(xué)習(xí)nodejs,知道了如何用nodejs創(chuàng)建一個簡單的小項目。例如如何創(chuàng)建一個服務(wù)器啦,例如http.createServer,還有根據(jù)不同的請求路徑來設(shè)置路由選擇啦,模塊引入,創(chuàng)建模塊啦,下面這篇文章主要介紹了node.js中url模塊的相關(guān)資料,需要的朋友可以參考下。
    2017-02-02
  • node.js使用yargs處理命令行參數(shù)操作示例

    node.js使用yargs處理命令行參數(shù)操作示例

    這篇文章主要介紹了node.js使用yargs處理命令行參數(shù)操作,結(jié)合實例形式分析了yargs庫的安裝及node.js使用yargs處理命令行參數(shù)具體實現(xiàn)技巧,需要的朋友可以參考下
    2020-02-02
  • Nodejs為什么選擇javascript為載體語言

    Nodejs為什么選擇javascript為載體語言

    準備寫一個NodeJS方面的系列文章,由淺入深,循序漸進,秉承的理念是重思想,多實踐,勤能補拙,貴在堅持。本文首先來點基礎(chǔ)知識的開篇吧。
    2015-01-01
  • Node.js實現(xiàn)連接mysql數(shù)據(jù)庫功能示例

    Node.js實現(xiàn)連接mysql數(shù)據(jù)庫功能示例

    這篇文章主要介紹了Node.js實現(xiàn)連接mysql數(shù)據(jù)庫功能,簡單分析了nodejs連接數(shù)據(jù)庫的操作步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • node.js中的fs.chownSync方法使用說明

    node.js中的fs.chownSync方法使用說明

    這篇文章主要介紹了node.js中的fs.chownSync方法使用說明,本文介紹了fs.chownSync的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node.js如何充分利用多核cpu

    node.js如何充分利用多核cpu

    這篇文章主要介紹了node.js如何充分利用多核cpu,想了解node.js的同學(xué),可以參考下
    2021-04-04
  • node運行js獲得輸出的三種方式示例詳解

    node運行js獲得輸出的三種方式示例詳解

    這篇文章主要介紹了node運行js獲得輸出的三種方式,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論

博湖县| 开阳县| 大关县| 青河县| 胶南市| 陈巴尔虎旗| 龙门县| 阿合奇县| 大关县| 万全县| 新乡县| 林口县| 桃源县| 吉木乃县| 齐河县| 新蔡县| 思南县| 白玉县| 赣榆县| 门源| 应城市| 三明市| 报价| 军事| 涟源市| 交口县| 文昌市| 定西市| 钟祥市| 喜德县| 瓮安县| 扎赉特旗| 大渡口区| 古丈县| 天全县| 宝兴县| 修水县| 焦作市| 石家庄市| 邯郸市| 白山市|