套接字的身份validation方法

我试图通过sailsjspassport获得身份validation工作。

这个挑战似乎是套接字连接没有会话,sailsjs嘲笑请求对象,导致它没有设置Passport中间件。 这导致nodejs抛出一个错误,说req对象没有一个叫做logIn的方法。

所以,我试着按照@xdissent在这里提供的代码片断: 通过websockets进行Sails.js + Passport.jsauthentication,这确实可以让我login而不会抛出错误。 或者呢? 事实certificate,它做了什么 ,但我不知道是什么。 因为通过不同的(套接字)请求获取req.user ,我得到一个空的对象返回。

我也看了redis。 这出来了:

 redis 127.0.0.1:6379> keys * 1) "waterline:broadcasting:_sequences:id" 2) "sess:aDJI0YHzh17E3AMjtKsZSijs" redis 127.0.0.1:6379> get "sess:aDJI0YHzh17E3AMjtKsZSijs" "{\"cookie\":{\"httpOnly\":true,\"path\":\"/\"}}" redis 127.0.0.1:6379> 

所以有一个会话,只是没有用户存储在它。

所以长话短说,我如何获得护照和sailsjs发挥好套接字。

更新 :我想了解一些关于会话,套接字和一般的风帆的信息。 所以,如果我在一个会话中设置东西,并刷新浏览器,我希望它仍然在那里。 如果我在与套接字连接相同的页面上进行xhr调用,不应该是相同的会话吗?

感谢Kasper Isager在不久的将来会有sails.js的护照生成器(Sails.js Version 0.10)。

他通过使用策略(sails中间件)来实施护照。

API /服务/ passport.js

 var passport = require('passport'); passport.serializeUser(function(user, next) { next(null, user.id); }); passport.deserializeUser(function(id, next) { User.findOne(id).done(next); }); // Put your Passport config logic here // Make passport globally available module.exports = passport; 

API /政策/ passport.js

 module.exports = function (req, res, next) { // Initialize Passport passport.initialize()(req, res, function () { // Use the built-in sessions passport.session()(req, res, function () { // Make the user available throughout the frontend res.locals.user = req.user; next(); }); }); }; 

configuration/ policies.js

 module.exports.policies = { '*': [ 'passport' ], // MyCustomController: { // update: [ // 'passport', // 'authorize' // ] // } }; 

这将使套接字请求中的护照请求方法(logIn等)也可用。

成功login后,您的服务器端会话对象将如下所示:

 { // Express cookie: { originalMaxAge: null, expires: null, httpOnly: true, path: '/' }, // Passport passport: { user: '52fc98e108b31348a537fa43' // userId } } 

您可以在req.session任何策略中访问它,甚至可以在如下的套接字callback中访问它:

configuration/ sockets.js

 onConnect: function(session, socket){} onDisconnect: function(session, socket){} 

如果你想看看Kaspers的全部实现,请检查他的存储库: sails-generate-auth