使用hesto/multi-auth时RedirectIfAdmin中间件持续触发跳转如何解决
问题原因
- 中间件用途匹配错误
RedirectIfAdmin属于访客类中间件,设计初衷是限制已登录的管理员访问登录页、忘记密码页等无需认证的公开路由,核心逻辑为已通过admin guard登录则强制跳转仪表盘。你当前错误将该中间件绑定到了需要登录后才可访问的/myapp业务路由组下,导致已登录状态下访问该组所有路由都会触发跳转规则。 - 路由组中间件配置错误
你提供的/myapp路由组没有显式绑定认证中间件,结合现象可以判断该路由组被全局绑定了RedirectIfAdmin中间件,常见于hesto/multi-auth生成的默认路由配置错误,或是RouteServiceProvider中加载admin路由时错误附加了该中间件。
解决方案
1. 调整中间件绑定范围
仅为公开访客路由(如管理员登录页、重置密码页)绑定 RedirectIfAdmin 中间件,示例配置:
// 仅公开访客路由绑定RedirectIfAdmin Route::group(['prefix' => '/myapp', 'middleware' => 'RedirectIfAdmin:admin'], function () { Route::get('login', [AdminLoginController::class, 'showLoginForm'])->name('myapp.login'); // 其他无需登录即可访问的admin路由 });
2. 给业务路由绑定正确的认证中间件
/myapp 下的所有需要登录的业务路由,绑定hesto/multi-auth生成的admin认证中间件 auth:admin 即可,不要附加 RedirectIfAdmin 中间件:
Route::group([ 'prefix' => '/myapp', 'as'=>'myapp.', 'middleware' => 'auth:admin' // 仅加认证中间件即可 ], function () { // 仪表盘路由 Route::get('dashboard', function () { return view('admin.dashboard'); })->name('dashboard'); // 用户资源路由 Route::resources([ 'user' => '\App\Http\Controllers\UserController' ]); });
3. 校验全局中间件配置
检查 app/Providers/RouteServiceProvider.php 中admin路由的加载逻辑,以及 app/Http/Kernel.php 的中间件组配置,确认RedirectIfAdmin没有被错误加入web全局中间件组或admin业务路由的默认中间件列表。
内容的提问来源于stack exchange,提问作者kapitan
相关产品推荐
相关产品推荐

