【发布时间】:2020-01-07 01:33:34
【问题描述】:
我已按照本教程中的说明设置了管理员身份验证防护:
Laravel Multiple Auth Tutorial
路线
Route::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);
}
$guard = array_get($exception->guards(), 0);
switch ($guard)
{
case 'admin':
$login = 'admin.show.login';
break;
default:
$login = 'login';
break;
}
return redirect()->guest(route($login));
}
在没有登录的情况下访问/admin 时,/admin/login 视图正确。登录后,/admin URL 出现无限重定向循环错误。管理员可以使用/admin/logout 路由成功注销。问题似乎是RedirectIfAuthenticated 中间件的原因。我错过了什么吗?
【问题讨论】:
-
RedirectIfAuthenticated 是路由
guest中间件不是全局的,请检查app/HTTP/Kernel.php。另请查看您链接的教程底部的评论。 -
你的评论启发了我。永远不要注意到
RedirectIfAuthenticated中间件是由guest关键字映射的。 -
是的,对于 RedirectIfAuthenticated 的真正作用是一种常见的误解,这个名称具有误导性。
标签: php laravel authentication routes