【问题标题】:Multiuser Authentication in laravel not work properlylaravel 中的多用户身份验证无法正常工作
【发布时间】:2018-07-24 21:17:00
【问题描述】:

我是创建用户登录和管理员登录。使用默认 laravel 身份验证的用户登录和我创建警卫的管理员。它的工作完美。没有任何问题可以运行我的代码,只有一个问题,当我以用户身份登录并且在以管理员身份登录后,还会显示用户正在登录。

配置\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,
    ],
],

];

App\Exception\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');
});

【问题讨论】:

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


    【解决方案1】:

    首先,很明显您正在使用多个守卫来验证不同类型的用户,因此当您通过标准身份验证守卫对Simple 用户进行身份验证时,然后您想要访问通过管理员身份验证的用户可用的路由守卫又名Admin用户,您需要先验证自己,所以Laravel multiguard authentication没有任何问题,您只是执行错误,我建议您阅读更多关于守卫的内容以及当您authenticate a用户通过特定的守卫,然后尝试访问需要不同守卫的路由。

    【讨论】:

    • 是的。!!谢谢,但给我一个帮助,如果我以用户的身份出现,这里的管理员守卫执行并来自用户,那么这个亲爱的守卫执行 {{ Auth::user()->name }}
    • Auth::guard('<guard_name>')->user()
    猜你喜欢
    • 2016-11-09
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2015-12-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    相关资源
    最近更新 更多