You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 21:05:03