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
相关产品推荐
相关产品推荐

