国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

express框架中使用jwt實現驗證的方法

2024-05-06 15:35:30
字體:
來源:轉載
供稿:網友

前言

接著上遍文章(使用session保存用戶數據)來讓使用jwt保存用戶數據。

這里會用到passport-jwt/jsonwebtoken。

passport-jwt是passport的一個驗證策略。它使用jwt(json web token)驗證。

jsonwebtoken是一個編碼、解碼、驗證jwt的模塊。

使用jwt保存用戶數據與使用session保存用戶數據對比

session json web token
保存在server 保存在client

因session保存在server,所以服務器壓力比較大。聽說并發量達到1k時就能看到效果。

因jwt保存在client,所以需要加密。

使用jwt

1. 安裝依賴。

npm i passport-jwt jsonwebtoken

2. 創建一個配置文件,引用配置是使用。

// ./config.jsmodule.exports = { secretKey: '12345-67890-9876-54321', mongoUrl: 'mongodb://localhost:27017/confusion'}

3. 使用數據庫鏈接配置

var config = require('./config')...const url = config.mongoUrlconst connet = mongoose.connect(url, {useNewUrlParse: true, useCreateIndex: true})

4. 創建驗證文件

./authenticate.jsvar passport = require('passport'), LocalStrategy = require('passport-local').Strategy, User = require('./models/user')var JwtStrategy = require('passport-jwt').Strategy, ExtractJwt = require('passport-jwt').ExtractJwt, jwt = require('jsonwebtoken')var config = require('./config.js')passport.use(new LocalStrategy(User.authenticate()))passport.serializeUser(User.serializeUser())passport.deserializeUser(User.deserializeUser())exports.getToken = function (user) { return jwt.sign(user, config.secretKey, {expiresIn: 3600}) // 簽發token時設置超時時間是3600s}var opts = {}opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken() // 從驗證頭中提取,模型默認是`'bearer'`.opts.secretOrKey = config.secretKeyexports.jwtPassport = passport.use(new JwtStrategy(opts, (jwt_payload, done) => { console.log('JWT payload: ', jwt_payload) User.findOne({_id: jwt_payload._id}, (err, user) => { if (err) { return done(err, false) } else { if (user) { return done(null, user) } else { return done(null, false) } } })}))exports.verifyUser = passport.authenticate('jwt', {session: false}) // 使用jwt就不再需要session保存用戶數據了。

5. 用戶申請登錄時把jwt給前端

// routes/users.js...var authenticate = require('../authticate')router.post('/login', passport.authenticate('local'), (req, res) => { // 登錄時還是使用passport-local var token = authenticate.getToken({_id: req.user._id}) // 得到簽發后的jwt res.statusCode = 200 res.setHeader('Content-Type', 'application/json') res.json({success: true, token: token, status: 'You are successful logged in!'})})            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 广宗县| 永德县| 金湖县| 渑池县| 德江县| 门源| 安溪县| 农安县| 洞口县| 屏东市| 嘉荫县| 抚顺县| 沧州市| 宁武县| 平顺县| 富宁县| 呼玛县| 永登县| 津市市| 定兴县| 金阳县| 平湖市| 桂林市| 正镶白旗| 闸北区| 莱西市| 沾益县| 阿合奇县| 蓬安县| 永济市| 沽源县| 托克逊县| 澄江县| 新郑市| 罗山县| 南木林县| 泗水县| 平安县| 容城县| 武功县| 长寿区|