簡體   English   中英

Passport + JWT + Socket.IO身份驗證

[英]Passport + JWT + Socket.IO Authentication

我正在尋找在我的KOA NodeJS應用程序中使用Socket.io實現JWT身份驗證的最佳方向。

我發現了一個巨大的回購上socketio +智威湯遜,但筆者不使用的護照,也沒有興亞。 我認為我已經有了一個良好的開端,但是我想知道自從使用JWT以來,Passport是否過高。 下面是我的代碼。

Koa.js

 import koa from 'koa'; import router from 'koa-router'; import json from 'koa-json'; import bodyParser from 'koa-bodyparser'; import passport from './passport'; import session from './session'; import { config } from './env/env'; export class Koa { constructor(){ this.app = koa(); this.initMiddleware(); } initMiddleware(){ this.app.use(json()); this.app.use(bodyParser()); this.app.keys = config.secret; this.app.use(session); this.app.use(passport.initialize()); this.app.use(passport.session()); } } 

Session.js

 import session from 'koa-generic-session'; // todo: configure for db backed store export default session(); 

Passport.js

 import passport from 'koa-passport'; import { config } from './env/env'; import { Strategy } from 'passport-jwt'; // todo! var user = { id: 1, username: 'test' } passport.serializeUser((user, done) => { done(null, user.id) }); passport.deserializeUser((id, done) => { done(null, user) }); const opts = { secretOrKey: config.secret }; passport.use(new Strategy(opts, (jwt_payload, done) => { // User.findOne({id: jwt_payload.sub}, function(err, user) { if (username === 'test' && password === 'test') { done(null, user) } else { done(null, false) } })); export default passport; 

socketio.js

 import io from 'socket.io'; import session from './session'; export class SocketIO { constructor(application){ this.io = io(application.server); // authenticate middleware this.io.use(function(socket, next){ // http://stackoverflow.com/questions/13095418/how-to-use-passport-with-express-and-socket-io // http://stackoverflow.com/questions/26643370/get-user-id-socket-io-passport-koa //var sid = cookie.parse(socket.handshake.headers.cookie)['koa.sid']; session.apply(socket.request, next); }); this.buildEvents(); } buildEvents(){ this.io.on('connection', (socket) => { console.log(`new connection: ${socket.id}`); // accessible through a api route application.app.socket = socket; socket.on('disconnect', () => { console.log(`disconnected: ${socket.id}`); }); }); } } 

謝謝你的幫助。

您可能是正確的,因為護照可能會過大。 也許在npm上查看jsonwebtoken

然后,您可以將.verify()函數添加到您的身份驗證中間件中,並且在創建會話時僅使用.sign()即可將用戶指定為已身份驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM