我正在使用 passport 进行 facebook、google、github、twitter 身份验证。 facebook、google、github 的身份验证在 tutorial 中如何执行被写了。仅在 Twitter 上回复我消息:
500 Internal Server Error: OAuth authentication requires session support. Did you forget to use express-session middleware?
然后我添加了快速 session 中间件(如下所示),我的问题就消失了。
import * as expressSession from "express-session";
app.use(expressSession({
secret: strategyOptions.session.secret,
resave: false,
saveUninitialized: true
}));
所以我有 3 个问题:
- 为什么 Twitter 身份验证需要 session 支持?
- 我猜只有我的后端和前端知道 session 。 Twitter 如何知道我的 session ?
- 为什么 Google、Facebook、Github 不需要 session 支持?
最佳答案
1) 为什么 Twitter 身份验证需要 session 支持?
- twitter 身份验证需要一个
requestTokenStore
来在交换之前存储 token 。默认情况下,它是来自passport-oauth1
的SessionRequestTokenStore
。
2)我猜测只有我的后端和前端知道 session 。 Twitter 如何知道我的 session ?
- Twitter 身份验证是一个在您的后端运行的中间件,因此它知道您的 session 。
3) 为什么 Google、Facebook、Github 不需要 session 支持?
- Google、Facebook、Github 使用
passport-oauth2
,不需要requestTokenStore
( session )。
关于session - 为什么 Passport-twitter 需要 session 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44071555/