Argon2密码验证通过后,为什么后续请求还是需要重新验证用户身份?
我在用Express和argon2做密码登录功能,登录时argon2.verify对比密码成功后,用session记录了用户ID。但之后调用保护的API时,express-session突然显示用户未登录了,难道每次请求都要重新用argon2验证密码吗?
尝试过这样写登录逻辑:
await argon2.verify(hash, password).then(() => {
req.session.userId = user.id;
res.json({ success: true });
});
但访问/api/dashboard时还是会触发未认证的拦截,明明设置了resave和saveUninitialized为true…
你遇到的情况可能是session没正确保存或者丢失了。先检查这几个地方:
1. 确保用了
cookie-parser中间件,因为express-session依赖它。2. session存储设置里
resave和saveUninitialized确实是true,但更重要的是secret是否设置了,比如:secret: 'your-secret-key'。3. 如果用的是浏览器客户端,确认cookies有没有正确发送到服务器端,有时候跨域会干扰cookies。
下面是一个完整的登录和路由保护示例,你可以对比一下:
如果还是有问题,可能是其他地方干扰了session机制,比如CORS配置或者客户端代码没正确处理cookies。多看看控制台的日志输出吧,一般都能找到线索。