Laravel 9自定义Guard在中间件中返回false问题求助
Laravel 9自定义Admin Guard中间件check返回false的排查解决
核心问题:会话中间件缺失
你的admin路由组仅挂载了自定义的admin中间件,但基于Session的认证依赖Web中间件组中的会话、Cookie处理逻辑,Laravel 9中会话相关中间件(如StartSession、EncryptCookies)不会自动全局生效,必须显式添加到路由组中。
修复步骤:
修改RouteServiceProvider.php中的admin路由配置,同时启用web和admin中间件:
Route::middleware(['web', 'admin']) ->prefix('admin') ->namespace($this->namespace) ->group(base_path('routes/admin.php'));
辅助检查项
1. Admin模型是否实现认证接口
确保App\Models\Admin继承Laravel的认证基类,提供必要的认证方法:
<?php namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; class Admin extends Authenticatable { protected $fillable = ['email', 'password']; protected $hidden = ['password', 'remember_token']; }
2. 会话配置有效性
检查config/session.php中的driver是否为file(默认),且storage/framework/sessions目录有读写权限,避免会话无法持久化。
3. 登录逻辑验证
登录成功后,可在AdminLoginController的adminLogin方法中临时添加调试代码,确认认证状态:
if (Auth::guard('admin')->attempt($credentials, $remember_me)) { dd(Auth::guard('admin')->check()); // 应返回true return redirect()->route('admin.dashboard'); }
内容的提问来源于stack exchange,提问作者Waleed
相关产品推荐
相关产品推荐

