Passport认证成功后返回HTTP 500且未调用路由方法求助
问题解决:Passport自定义策略验证成功后未执行后续路由处理函数
你的问题出在Passport验证成功后的会话处理环节,以下是两种可行的解决方案:
方案1:禁用会话(不需要持久化用户会话时使用)
在passport.authenticate中添加{ session: false }选项,跳过Passport的会话序列化流程,直接进入后续处理函数:
router.get("/getData", passport.authenticate("consumer-validation", { session: false }), getAccountData );
方案2:配置序列化/反序列化方法(需要会话时使用)
如果你的业务需要用户会话,添加以下序列化和反序列化方法,让Passport能正确处理用户会话:
passport.serializeUser((user, done) => { done(null, user); }); passport.deserializeUser((user, done) => { done(null, user); });
同时确保你已经在应用中初始化了Passport:
const express = require('express'); const passport = require('passport'); const app = express(); // 初始化Passport app.use(passport.initialize()); // 如果使用会话,需额外添加 // app.use(passport.session());
原因说明
当Passport验证成功后,默认会尝试将用户信息序列化到会话中。如果未配置序列化方法且未禁用会话,Passport会在此环节卡住,无法继续调用后续的getAccountData方法。而你返回done("Error")时,会直接触发401响应,不会走到会话序列化步骤,所以能看到错误结果,但验证成功时会卡在序列化流程里。
内容的提问来源于stack exchange,提问作者Nathan Nguyen
相关产品推荐
相关产品推荐

