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

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

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

1. token的使用場(chǎng)景

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

2. 基于token的驗(yàn)證原理

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

加密的方式:對(duì)稱加密和非對(duì)稱加密,對(duì)稱加密指的是加密解密使用同一個(gè)密鑰,非對(duì)稱加密使用公鑰和私鑰,加密用私鑰加密,解密用公鑰解密

3. 基于Token的身份驗(yàn)證的過程如下:

客戶端:用戶名和密碼請(qǐng)求登錄

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

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

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

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

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

安裝 OpenSSl http://slproweb.com/products/Win32OpenSSL.html或本地下載地址: http://www.dbjr.com.cn/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 驗(yàn)證是否有 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ù)的請(qǐng)求

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

 // token驗(yàn)證( 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 過期是時(shí)才生成 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)限驗(yàn)證token驗(yàn)證實(shí)現(xiàn)的方法示例的文章就介紹到這了,更多相關(guān)Node登錄權(quán)限驗(yàn)證token驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

    assert 模塊主要用于編寫程序的單元測(cè)試時(shí)使用,通過斷言可以提早發(fā)現(xiàn)和排查出錯(cuò)誤。下面這篇文章主要給大家介紹了關(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)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • node.js入門學(xué)習(xí)之url模塊

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

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

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

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

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

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

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

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

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

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

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

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

    node運(yùn)行js獲得輸出的三種方式示例詳解

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

最新評(píng)論