gpt4 book ai didi

node.js - 将 Passport 和 OAuth 与 connect-redis 结合使用

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:31 26 4
gpt4 key购买 nike

我正在尝试在使用 Redis 进行 Express session 的应用程序中使用 Passport -twitter 和 Passport -facebook 进行身份验证。如果我删除用于在 Express 中存储 session 的 connect-redis,一切正常,但对于 Redis session ,我收到以下错误:

Error: OAuth authentication requires session support
| at Strategy.OAuthStrategy.authenticate

我的代码如下:

app.configure(function(){
app.set('port', process.env.PORT || port);
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser("supersecret"));
app.use('/html', express.static('html'));
app.use('/assets', express.static('assets'));
});

if (process.env.REDISCLOUD_URL) {
var rtg = require("url").parse(process.env.REDISCLOUD_URL),
redis = require('redis'),
connectRedisStore = require('connect-redis')(express),
authToken = rtg.auth.split(":")[1];

app.configure(function(){
app.use(
express.session(
{
secret: 'supersecret',
cookie: { maxAge: 60000 },
store: new connectRedisStore({
host: rtg.hostname,
port: rtg.port,
db: authToken[0],
pass: authToken[1]
})
}
)
);

app.use(passport.initialize());
app.use(passport.session(
{
secret: 'supersecret',
store: new connectRedisStore({
host: rtg.hostname,
port: rtg.port,
db: authToken[0],
pass: authToken[1]
})
}
));
});
}

可以一起使用这些吗?

编辑:在进一步调试时,似乎使用 connect-redis 进行快速 session 存储并没有将 req.session 设置为任何内容。这就是导致问题的原因。不幸的是,我似乎根本无法让它发挥作用。其他有同样问题的人已经通过将 cookieParser 行放在 session 行上方来修复它,但这就是我一直存在的位置,所以问题是其他的。我很茫然。

最佳答案

好吧,经过两天的搜索和浏览所有涉及的node_modules(express、connect、connect-redis)的源代码,我将问题归结为一个简单的愚蠢的拼写错误。

authToken = rtg.auth.split(":")[1];

这里的 authToken 只是提供密码(这是 redis 用于连接的所有内容)。但是要手动选择数据库,您需要删除 [1] 并传入第一个元素作为数据库名称,第二个元素作为传递。希望它对其他人有帮助!

关于node.js - 将 Passport 和 OAuth 与 connect-redis 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16523991/

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