如何在laravel中为认证控制器设置新的保护


how to set new guard for auth controller in laravel

我想在我的laravel项目中进行多重身份验证。

我在auth.php文件中创建了新的守卫"admin",但我不知道如何在我的authcontroller中设置新创建的守卫。

它总是使用我的auth.php中的"defaults"设置:

'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],

1)如果您希望在整个应用程序中使用新创建的admin保护,您可以更改配置文件defaults中的值。


2)如果只是关于AuthController使用了Laravel内置的Auth系统,你可以在AuthController.phpPasswordController.php: 中添加这一行
protected $guard = 'admin';

Ref - Check Guard custom here


3)如果您希望为任何与Auth相关的任务指定除默认守卫之外的守卫,您可以像这样手动指定它:

// For route middleware
Route::get('profile', [
    'middleware' => 'auth:admin',
    'uses' => 'ProfileController@show'
]);
// For manually logging the user in
if (Auth::guard('admin')->attempt($credentials)) {
    // Authenticated...
}
// To login specific user using eloquent model
Auth::guard('admin')->login($user);
// For getting logged in user
Auth::guard('admin')->user();
// To check if user is logged in
if (Auth::guard('admin')->check()) {
    // Logged in
}

Ref - https://laravel.com/docs/5.2/authentication

Laravel 5.4+在任何Auth控制器中使用以下内容:

use Illuminate'Support'Facades'Auth;
protected function guard(){
   return Auth::guard('guard-name');
}

您还必须在config'auth.php中注册守卫

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
     'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
],

admin是守护名,provider是TABLE-NAME