Passport.js不能在风帆插座环境下工作
passport.js doesn't work on sails socket environment
我认为passport.js是一个了不起的框架。然而,不幸的是,它似乎不支持socket。我之所以这么说,是因为Sails框架提供了http和套接字。当用户通过passport.js连接sails服务时,这无关紧要。通过套接字访问出错。因为socket可能不支持中间件?
不管怎样,关键的问题是,我不知道如何在socket上应用passport.js
确实,websocket请求不传递护照中间件,但可以使用变通方法。您正在使用这个航海护照生成器吗?
我将此代码添加到护照策略中,以便向套接字请求添加护照方法。
/** Content not generated BEGIN */
var http = require('http')
, methods = ['login', 'logIn', 'logout', 'logOut', 'isAuthenticated', 'isUnauthenticated'];
/** Content not generated END */
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;
/** Content not generated BEGIN */
// Make the passport methods available for websocket requests
if (req.isSocket) {
for (var i = 0; i < methods.length; i++) {
req[methods[i]] = http.IncomingMessage.prototype[methods[i]].bind(req);
}
}
/** Content not generated END */
next();
});
});
};
Alexis给出了正确的答案…我认为这是Mike建议的方式,关于这条消息:https://stackoverflow.com/a/17793954/6793876
在config/http.js中删除passport的提及,用以下内容创建新的策略passportMiddleware.js:
//passportMiddleware.js
var passport = require('passport');
var http = require('http');
module.exports = function (req, res, next) {
// Initialize Passport
passport.initialize()(req, res, function () {
// Use the built-in sessions
passport.session()(req, res, function () {
res.locals.user = req.user;
var methods = ['login', 'logIn', 'logout', 'logOut', 'isAuthenticated', 'isUnauthenticated'];
if (req.isSocket) {
for (var i = 0; i < methods.length; i++) {
req[methods[i]] = http.IncomingMessage.prototype[methods[i]].bind(req);
}
}
next();
});
});
};
最后将此策略添加到所有控制器中,在policies.js:
module.exports.policies = {
RabbitController: {
nurture : ['passportMiddleware','isRabbitMother'],
feed : ['passportMiddleware','isNiceToAnimals', 'hasRabbitFood']
}
};
相关文章:
- 运行时环境究竟是如何工作的
- 根据工作环境缩小和取消缩小 js
- 为什么我的程序在我的测试环境中工作,而不是我的实时站点
- 为什么我的 javascript 在测试环境中工作,但在实时站点上不起作用
- Javascript 未捕获类型错误仅在实时环境中,在 Dev 上工作正常
- 为什么控制台.log在JSC环境中不起作用,但它可以在Safari的调试控制台中工作
- AngularJS过滤器和ng模型如何在JavaScript环境中工作
- 如何使控制器/视图特定的Javascript在Rails3.1生产环境中工作
- 带有'slidedown'函数在我的虚拟环境中工作,但不是真实的环境
- NPM环境变量不能在windows中工作
- 为什么我的javascript在现场停止工作,但在测试环境中工作得很好
- UglifyJS无法在Symfony2生产环境中工作
- JQuery验证不能在非英语语言环境中工作
- 为什么Bootstrap's下拉开关在某些环境下工作,而在其他环境下不起作用?
- OBJ MTL加载器与环境光不工作
- Fancybox打开问题-在JSFiddle上工作,但不能在现场环境中工作
- 为什么设置了NODE_DEBUG=fs环境变量但不工作
- 剑道UI模型验证只在本地环境下工作
- 替换在触摸屏环境中工作的Title属性
- Javascript/Regex:Expression在一个环境中工作,而不是在另一个环境