我認爲passport.js是一個了不起的框架。不幸的是,它似乎不支持套接字。爲什麼我說這是Sails框架提供的http和套接字。當用戶通過passport.js連接sails的服務時,無關緊要。通過套接字訪問會導致錯誤。由於套接字可能不支持中間件?passport.js不適用於風帆套接字環境
無論如何,ciritical的問題,我不知道如何在套接字上應用passport.js。給我建議好的想法來呼吸。
我認爲passport.js是一個了不起的框架。不幸的是,它似乎不支持套接字。爲什麼我說這是Sails框架提供的http和套接字。當用戶通過passport.js連接sails的服務時,無關緊要。通過套接字訪問會導致錯誤。由於套接字可能不支持中間件?passport.js不適用於風帆套接字環境
無論如何,ciritical的問題,我不知道如何在套接字上應用passport.js。給我建議好的想法來呼吸。
事實上,websocket請求不會通過護照中間件,但可以使用解決方法。你使用這個sails passport generator?
我將此代碼添加到護照策略中,以將護照方法添加到套接字請求中。
/** 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();
});
});
};
亞歷克西斯給了正確的答案......我認爲這是由Mike建議報告的方式,對此消息:https://stackoverflow.com/a/17793954/6793876
只要刪除護照在配置/ http.js提到,結交新政策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']
}
};
你的代碼在我搜索的內容中是最好的。 –