Node.js Handlebars双表单问题:提交后意外登出跳转登录页求助
检查表单的
action和method属性
确认第二个表单的action是否指向了错误路由(比如误写为/logout),或者method与路由定义不匹配。比如若登出路由是GET /logout,而表单误设为method="GET"且action="/logout",提交时就会触发登出流程。排查CSRF令牌配置
如果应用启用了CSRF保护(如csurf中间件),检查第二个表单是否正确携带CSRF令牌。令牌缺失或无效会导致请求被拒绝,部分场景下会触发会话重置,进而被Passport的未登录拦截器跳转。确保表单中包含:<input type="hidden" name="_csrf" value="{{csrfToken}}">检查表单字段是否冲突
确认第二个表单中是否存在干扰Passport会话的字段,比如误设name="username"或name="password"但未正确处理,导致Passport认证中间件误判验证失败、销毁会话。查看表单处理路由的代码
检查第二个表单对应的处理路由,是否不小心调用了req.logout()(或req.session.destroy())这类销毁会话的方法,或是在路由中错误清除了认证相关Cookie。验证Passport中间件的路由应用
确认第二个表单的处理路由是否正确应用了登录验证中间件(比如isAuthenticated),同时检查未登录拦截中间件的逻辑,是否存在误判请求状态的情况——有些中间件会在请求参数异常时直接重定向到登录页,而非返回错误。检查会话存储与Cookie设置
查看Express会话(express-session)的配置,确认cookie的path、maxAge等参数是否正确。如果第二个表单提交后会话Cookie被意外清除或过期,会导致用户被视为未登录。
内容的提问来源于stack exchange,提问作者IKambs

