laravel中的多用户身份验证无法正常工作

时间:2018-02-14 10:24:58

标签: laravel login routes laravel-5.4 laravel-middleware

  

我是创建用户登录和管理员登录。用户登录使用默认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');
});

1 个答案:

答案 0 :(得分:0)

首先,很明显您使用多个防护来验证不同类型的用户,因此当您通过标准的auth防护对Simple用户进行身份验证,然后您想要访问经过身份验证的用户可用的路由时通过admin guard aka Admin用户,你需要首先验证自己,所以Laravel multiguard authentication没有任何问题,你只是执行错误,我建议你多读一些关于守卫的信息,以及是什么意思当你authenticate用户通过某个警卫,然后尝试访问需要不同警卫的路线时。