gpt4 book ai didi

node.js - 通过套接字的身份验证方法

转载 作者:IT老高 更新时间:2023-10-28 23:01:40 26 4
gpt4 key购买 nike

我正在尝试使用 sailsjspassport 在套接字上进行身份验证。

挑战似乎在于套接字连接没有 session ,并且sailsjs 模拟请求对象,导致它没有设置 Passport 中间件。这导致 nodejs 抛出错误,说 req 对象没有名为 logIn 的方法。

所以,我尝试按照@xdissent 提供的代码片段进行操作:Sails.js + Passport.js authentication through websockets这确实允许我登录而不会引发错误。或者它..?事实证明它做了something,但我不知道是什么。因为在通过不同的(套接字)请求获取 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>

所以有一个 session ,只是没有存储用户。

长话短说,我如何让 Passport 和sailsjs 在套接字上运行良好。

更新:我想要一些关于 session 、套接字和一般情况下带有 sails 的 cookie 的信息。因此,如果我在 session 中设置内容并刷新浏览器,我希望它仍然存在。如果我在与套接字连接相同的页面上进行 xhr 调用,那不应该是同一个 session 吗?

最佳答案

感谢 Kasper Isager在不久的将来会有一个用于sails.js 的 Passport 生成器(Sails.js 版本 0.10)。

他通过使用策略(sails 中间件)来实现 Passport。

api/services/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/policies/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();
});
});

};

config/policies.js

module.exports.policies = {

'*': [ 'passport' ],

// MyCustomController: {
// update: [
// 'passport',
// 'authorize'
// ]
// }

};

这将使 Passport 请求方法(登录等)在套接字请求中也可用。

成功登录后,您的服务器端 session 对象将如下所示:

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

您可以使用 req.session 在任何策略中访问它,甚至可以在套接字回调中访问它,例如:

config/sockets.js

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

如果您想查看 Kaspers 的完整实现,请查看他的存储库: sails-generate-auth

关于node.js - 通过套接字的身份验证方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21414610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com