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

Laravel登录成功后无法保持登录状态,跳转回登录页问题

问题:Laravel中使用Auth::login()登录后无法保持状态,跳转回登录页

尝试了多种登录方式,其中可正常执行的是Auth::login($user);,但登录后无法维持会话状态,会自动跳转回登录页面。

对应的登录控制器代码如下:

public function validateCode(Request $request)
{
    $email = $request->email;

    // Get user
    $user = User::where('email', $email)->first();

    
    if ($user->count() > 0) {
        $validateCode = $request->input('validateCode');
        
        // Check the codes
        if ($validateCode == $user['codConfirm']) {
            Auth::login($user, true);
            
            if(Auth::check())
                return redirect()->route('home');
            else{
                dd('else');
                return redirect()->action('Auth\LoginController@index', ['validator' => ['Não foi possível fazer o login']]);
            }
        } else {
            return view('confirmar-usuario', ['email' => $email]);
        }
    } 
    else {
        flash('Usuário inválido')->error();

        return view('login');
    }
}
解决方案

1. 修复核心逻辑错误

代码中存在致命逻辑错误:$user = User::where('email', $email)->first();返回单个用户模型实例或null,调用$user->count()是错误用法——该方法用于统计模型关联数据的数量,而非判断用户是否存在。这会导致即使用户存在,也可能因关联数据数量为0进入else分支,根本未执行登录逻辑。

修正后的判断代码:

// 替换原有的if ($user->count() > 0)
if ($user) {
    // 后续登录逻辑
}

2. 其他排查点

若修复上述问题后仍存在状态丢失,可检查以下内容:

  • 用户模型验证:确保User模型继承Illuminate\Foundation\Auth\User类(该类已实现Authenticatable接口,是Laravel认证的基础)
  • 会话配置检查:
    • 打开config/session.php,确认domain配置与当前站点域名一致(跨域场景需设置正确根域名)
    • 检查driver配置对应的存储介质:使用file驱动时,storage/framework/sessions目录需具备读写权限;使用database驱动时需确保会话表已正确生成
  • 路由中间件:确认跳转的home路由已正确使用auth中间件
  • CSRF令牌验证:确保登录请求携带正确的CSRF令牌,避免会话被重置

内容的提问来源于stack exchange,提问作者Gabriel Edu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:00:24