Node.js Passport Local认证成功重定向失效,页面持续加载求助
问题排查与解决
你的问题出在Passport Local策略的验证回调函数中,当用户凭证校验通过时,你没有正确调用done方法完成认证流程,导致Passport一直处于等待状态,后续逻辑无法执行。
错误代码位置
看这段策略验证的核心代码:
if(!user || user.password != password){ console.log("User not found passport_local_stra"); return done(null,false) } return (null ,user); // 这里是错误的!
修正方法
必须调用done函数传递认证成功的用户对象:
if(!user || user.password != password){ console.log("User not found passport_local_stra"); return done(null,false) } return done(null, user); // 调用done完成认证流程
原因解析
Passport的认证机制完全依赖done回调来传递结果:
- 凭证不匹配时,你正确调用了
done(null, false),Passport能识别到认证失败,触发配置好的failureRedirect - 凭证校验通过时,你直接返回
(null, user)而没有调用done,导致Passport一直等待回调结束,后续的usersController.createSession永远不会执行,页面也就持续加载无法完成重定向
额外安全建议
直接明文比对密码存在严重安全风险,建议使用bcrypt等工具加密存储密码:
// 用户注册时加密密码 const bcrypt = require('bcrypt'); const hashedPassword = await bcrypt.hash(userInputPassword, 10); // 认证时比对密码 bcrypt.compare(userInputPassword, user.password, (err, isMatch) => { if (err) return done(err); if (!isMatch) return done(null, false); return done(null, user); });
内容的提问来源于stack exchange,提问作者Rohit Sharma
相关产品推荐
相关产品推荐

