我是创建用户登录和管理员登录。用户登录使用默认laravel身份验证和管理员为我创建后卫。它的工作完美。没有任何问题,当我以用户身份登录时,只运行我的代码只有一个问题,登录后为admin,然后还显示用户登录。
ECDSA sign with OpenSSL, verify with Crypto++ congig \ auth.php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'admin-api' => [
'driver' => 'token',
'provider' => 'admins',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 15,
],
],
];
应用\异常\ Handler.php
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.login';
break;
default:
$login='login';
break;
}
return redirect()->guest(route($login));
}
路由器
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Route::prefix('admin')->group(function(){
Route::get('/login','Auth\AdminLoginController@showLoginForm')-
name('admin.login');
Route::post('/login','Auth\AdminLoginController@login')-
name('admin.login.submit');
Route::get('/', 'AdminController@index')->name('admin.dashboard');
});
答案 0 :(得分:0)
首先,很明显您使用多个防护来验证不同类型的用户,因此当您通过标准的auth防护对Simple
用户进行身份验证,然后您想要访问经过身份验证的用户可用的路由时通过admin guard aka Admin
用户,你需要首先验证自己,所以Laravel multiguard authentication
没有任何问题,你只是执行错误,我建议你多读一些关于守卫的信息,以及是什么意思当你authenticate
用户通过某个警卫,然后尝试访问需要不同警卫的路线时。