为了账号安全,请及时绑定邮箱和手机立即绑定

设置多个身份验证防护时 Laravel 重定向错误

设置多个身份验证防护时 Laravel 重定向错误

PHP
慕标5832272 2021-12-24 16:05:42
我已经按照本教程中的描述设置了一个管理员身份验证防护: Laravel Multiple Auth TutorialRoutesRoute::group([    'prefix' => 'admin',    'namespace' => 'Auth'], function() {    Route::get('/login', 'AdminController@showLogin')->name('admin.show.login');    Route::post('/login', 'AdminController@login')->name('admin.login');    Route::group([        'middleware' => 'auth:admin'    ], function() {        Route::get('/', 'AdminController@index')->name('admin.home');        Route::get('/logout', 'AdminController@logout');    });    });控制器class AdminController extends Controller{    public function __construct()     {        $this->middleware('guest:admin')->except('logout');    }    public function index()     {        return "Admin authenticated";    }    public function showLogin()     {        return view('admin.login');    }    public function login(Request $request)    {        $admin = Admin::where('login_id', $request->input('login'))->firstOrFail();        Auth::guard('admin')->loginUsingId($admin->id, TRUE);        return redirect()->intended(route('admin.home'));    }    public function logout()    {        Auth::guard('admin')->logout();        return redirect()->route('admin.show.login');    }}RedirectIfAuthenticated 中间件public function handle($request, Closure $next, $guard = null){    switch ($guard)     {        case 'admin':            if (Auth::guard($guard)->check())             {                return redirect()->route('admin.home');            }            break;        default:            if (Auth::guard($guard)->check()) {                return redirect('/home');            }            break;    }    return $next($request);}异常处理程序protected function unauthenticated($request, AuthenticationException $exception) {    if ($request->expectsJson())     {        return response()->json(['error' => 'Unauthenticated.'], 401);    }当/admin没有在洛被访问时,所述/admin/login视图是正确。登录后,/adminURL 导致无限重定向循环错误。管理员可以使用/admin/logout路由成功注销。问题似乎是RedirectIfAuthenticated中间件的原因。我错过了什么吗?
查看完整描述

1 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

似乎您的问题发生在AdminController,特别是构造函数中。

重定向循环发生在路由上,/admin因为中间件与auth:admin中间件(在路由中)和guest:admin中间件(在控制器中)发生冲突。

你想要的是将guest:admin中间件应用于所有的 exceptindexlogout函数:

$this->middleware('guest:admin', ['except' => ['index', 'logout']]);


查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信