gpt4 book ai didi

node.js - NodeJS Passport 本地策略通知客户端用户已通过身份验证

转载 作者:太空宇宙 更新时间:2023-11-04 02:34:32 24 4
gpt4 key购买 nike

我已经使用 Passport-local 和 MongoDB 实现了 Passport,并且运行良好。

然而,这是一个纯客户端单加载应用程序,因此 Node 不负责 html 的渲染。因此,目前我展示了在应用程序加载时加载微调器,并单独调用 api 来确定用户是否登录以有条件地呈现某些内容:

router.get('/me', function (req, res) {
res.send(req.isAuthenticated() ? {} || 401);
});

由于 Passport 已经验证了我的路线并调用 deserializeUser 这似乎毫无意义 - 我需要一种方法来传递一条额外的信息(在 cookie 中?),表明用户已通过身份验证,我猜是在 deserializeUser 中?

server.use(session({secret: settings.sessionSecret}));
server.use(passport.initialize());
server.use(passport.session());

....

passport.use(new LocalStrategy(
localOpts,
function(email, password, done) {
User.findOne({
email: email,
activated: true
}, function (err, user) {
....
});
}
));

passport.serializeUser(function (user, done) {
done(null, user._id);
});

passport.deserializeUser(function (id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});

请注意,登录成功时创建的两个 cookie:

express:sess
express:sess.sig

当它检测到这些 cookie 的存在时,它似乎只是调用 deserializeUser 因此,为什么我认为我可以与客户端通信,用户在那里进行了身份验证,或者以其他方式在 passport.use 中间件内登录?

最佳答案

事实证明,我可以简单地在passport.session之后添加一个中间件。我担心 req.isAuthenticated 会向数据库发起另一个查询,但事实并非如此:

server.use(function(req, res, next) {
res.cookie('isAuthenticated', req.isAuthenticated());
next();
});

关于node.js - NodeJS Passport 本地策略通知客户端用户已通过身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23686703/

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