Passport + JWT + Socket.IO身份validation
我正在寻找在我的KOA NodeJS应用程序中使用Socket.io实现JWT身份validation的最佳方向。
我在socketio + jwt上find了一个很好的回购 ,但是作者并没有使用护照也没有使用koa。 我想我已经有了一个好的开始,但是我想知道在使用智威汤逊之后,护照是否过分了。 以下是我的代码。
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()
函数添加到您的身份validation中间件中,只需在创build会话时使用.sign()即可将用户指定为已validation身份。
- 在哪里存储JWT客户端凭证授权
- Passport身份validationfunction在节点API中不起作用
- 如何在服务器身份validation后使用JSON Web令牌提供前端?
- 如何刷新Google Analytics(分析)报告API v3的访问令牌
- Angular Node JWT令牌authentication和页面redirect
- 什么是身份validation策略
- 为什么在MEAN应用程序的每个请求中授权头返回undefined
- 如何在我的所有请求查询string中包含JSON webtoken
- Nodejs / mongodb-检查用户是否具有pipe理员权限(基于令牌的身份validation)