Jam*_*ger 5 javascript cookies node.js express typescript
我有一个使用 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);
}
);
Run Code Online (Sandbox Code Playgroud)
这是我的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]);
}
));
Run Code Online (Sandbox Code Playgroud)
这是我的应用程序设置:
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());
Run Code Online (Sandbox Code Playgroud)
我正在使用以下依赖版本:
"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"
Run Code Online (Sandbox Code Playgroud)
我在我的 中添加了一个回调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);
}
);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误:无法将用户序列化到会话中
当我遇到相关问题时,我从 Google 搜索中发现了这个问题。
我意识到这express-session不会持续会话,例如在服务器重新启动之间。阅读此处了解更多信息。
所以我换express-session了cookie-session:
app.use(cookieSession({
name: 'MyAppName',
keys: ['very secret key'],
maxAge: 30 * 24 * 60 * 60 * 1000 // 30 days
}));
Run Code Online (Sandbox Code Playgroud)
然后 PassportJS 会持续我的会话,不需要进一步更改!
| 归档时间: |
|
| 查看次数: |
6748 次 |
| 最近记录: |