没有会话的 Passport js 身份验证
Posted
技术标签:
【中文标题】没有会话的 Passport js 身份验证【英文标题】:Passport js authentification without sessions 【发布时间】:2014-10-20 06:19:16 【问题描述】:我是 expressjs 和 passportjs 的初学者。
我使用 GoogleStrategy 的护照通过谷歌进行身份验证。使用下面的代码,我在 /users/hello 路由处理程序中有req.user = id: '123456'
,但我想在没有会话支持的情况下获得类似的东西,以将其作为经过身份验证的客户端的答案发送。换句话说,如果在没有 cookie 会话启动的情况下身份验证成功,我想向客户端发送一些令牌。当我关闭会话时,我找不到如何将用户对象转发到目标路由处理程序的方法。
passport.use(new GoogleStrategy(
returnURL: 'http://localhost/auth/google/return',
realm: 'http://localhost/'
,
function(identifier, profile, done)
done(null, id: '123456');
));
passport.serializeUser(function(user, done)
done(null, user.id);
);
passport.deserializeUser(function(id, done)
done(null, id: id);
);
app.use(session( secret: 'keyboard cat' ));
app.use(passport.initialize());
app.use(passport.session());
app.get('/auth/google', passport.authenticate('google');
app.get('/auth/google/return',
passport.authenticate('google',
successRedirect: '/users/hello',
failureRedirect: '/users/goodbye'
));
【问题讨论】:
我认为 Google OAuth 不打算在没有会话的情况下工作。 我不会调用google api,我只需要验证用户使用我自己的api。我预计这种行为不取决于我使用的策略。 【参考方案1】:要关闭会话,请尝试更改此设置:
app.get('/auth/google/return',
passport.authenticate('google',
successRedirect: '/users/hello',
failureRedirect: '/users/goodbye'
));
到:
app.get('/auth/google/return',
passport.authenticate('google',
session:false
));
【讨论】:
可能还必须在 app.js 中注释掉 passport.use(session()) ......然后每次有对服务器的请求时我都必须登录...... 这会抛出OAuth authentication requires session support. Did you forget to use express-session middleware?
(可能是因为@waldo-jeffers 所说的以上是关于没有会话的 Passport js 身份验证的主要内容,如果未能解决你的问题,请参考以下文章
将服务器移动到 CORS 位置时,Passport/Express 会话身份验证中断
通过令牌进行身份验证,如果令牌失败,则通过会话进行身份验证,使用 Passport?
Nest.js 中使用 @nestjs/passport 的可选身份验证