gpt4 book ai didi

javascript - PassportJS 和 Express 4 没有正确保存 cookies/session

转载 作者:搜寻专家 更新时间:2023-10-30 20:59:12 26 4
gpt4 key购买 nike

我有一个使用 Express 4 和 Passport 0.3.2 的应用程序。我已经设置了一个 passport-local 策略,它在向 /session 端点发送用户名和密码时获取正确的用户信息。

然而,用户信息永远不会被正确保存。因此 req.user 在所有监听器中始终未定义,并且 req.isAuthenticated() 始终返回 false。

我看到其他帖子经常发现中间件设置的排序问题,但我已经以正确的方式排序它们,所以我不确定从这里去哪里。

这是我的 POST 监听器,用于 /session:

app.post("/session",
passport.authenticate('local'),
(req: any, res: any) => {
// if we reach this point, we authenticated correctly
res.sendStatus(201);
}
);

这是我的 LocalStrategy 设置:

passport.use(new LocalStrategy(
(username, password, done) => {
let users = userRepository.getAll();

let usernameFilter = users.filter(u => u.getUsername() === username);
if (!usernameFilter || usernameFilter.length !== 1) {
return done(null, false, { message: 'Incorrect username.' });
}

if (!password || password !== "correct") {
return done(null, false, { message: 'Incorrect password.' });
}

return done(null, usernameFilter[0]);
}
));

这是我的应用设置:

let app = express();
app.use(cookieParser());
app.use(bodyParser.json());
app.use(expressSession({
secret: 'my secret key',
resave: true,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());

我正在使用以下依赖版本:

"body-parser": "^1.15.1",
"cookie-parser": "^1.4.3",
"express": "^4.13.4",
"express-session": "^1.13.0",
"passport": "^0.3.2",
"passport-local": "^1.0.0"

我已经向我的 POST/session 添加了一个回调,但是抛出了一个错误。这是我的回调:

app.post("/session",
passport.authenticate('local', {
session: false
}),
(req: express.Request, res: express.Response) => {
req.logIn(req.user, (err: any) => {
if (err)
throw err;
});

// if we reach this point, we authenticated correctly
res.sendStatus(201);
}
);

我收到以下错误:

Error: Failed to serialize user into session

最佳答案

当我遇到相关问题时,我从谷歌搜索中找到了这个问题。

我意识到 express-session 不会持久化 session ,例如服务器重启之间。 Read here for more info .

所以我将 express-session 换成了 cookie-session相反:

app.use(cookieSession({
name: 'MyAppName',
keys: ['very secret key'],
maxAge: 30 * 24 * 60 * 60 * 1000 // 30 days
}));

然后 PassportJS 会保留我的 session ,不需要进一步更改!

关于javascript - PassportJS 和 Express 4 没有正确保存 cookies/session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37799852/

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