如何对 Laravel 5 中的多个表使用身份验证

How to use authentication for multiple tables in Laravel 5

有时,我们希望将用户和管理员分开放在不同的 2 个表中。
我认为这是一个很好的做法。

我正在寻找 Laravel 5 是否可行。

在阅读以下内容之前,您应该对 Laravel 5 中的 ServiceProvider、Facade 和 IoC 有基本的了解。开始了。

根据 Laravel 的文档,您可以发现 Facade 'Auth' 指的是 Illuminate\Auth\AuthManager,它有一个神奇的 __call()。您可以看到主要功能不在 AuthManager 中,而是在 Illuminate\Auth\Guard

Guard 有提供者。该提供商有一个 $model 属性,EloquentUserProvider 将根据 "new $model" 创建此模型。这些都是我们需要知道的。这是代码。

1.We 需要创建一个 AdminAuthServiceProvider.

public function register(){
    Auth::extend('adminEloquent', function($app){
        // you can use Config::get() to retrieve the model class name from config file
        $myProvider = new EloquentUserProvider($app['hash'], '\App\AdminModel') 
        return new Guard($myProvider, $app['session.store']);
    })
    $app->singleton('auth.driver_admin', function($app){
        return Auth::driver('adminEloquent');
    });
}

2.Facade:

class AdminAuth extends Facade {
        protected static function getFacadeAccessor() { return 'auth.driver_admin'; }
    }

3。将别名添加到内核:

'aliases' => [
    //has to be beneath the 'Auth' alias
    'AdminAuth' => '\App\Facades\AdminAuth'
]

希望这对您有所帮助。

我创建了一个 laravel 包,您可以在其中处理多重身份验证。

第 1 步:作曲家要求

首先,composer 需要 multiauth 包

composer require sarav/laravel-multiauth dev-master

第 2 步:替换默认的身份验证服务提供商

替换

Illuminate\Auth\AuthServiceProvider::class

Sarav\Multiauth\MultiauthServiceProvider

在您的 config/app.php 文件中

第 3 步:修改 auth.php

将您的 config/auth.php 文件修改成这样

'multi' => [
    'user' => [
        'driver' => 'eloquent',
        'model'  => App\User::class,
        'table'  => 'users'
    ],
'admin' => [
    'driver' => 'eloquent',
    'model'  => App\Admin::class,
    'table'  => 'admins'
   ]
],

就是这样!现在您可以通过将用户作为第一个参数传递来尝试多重身份验证。例如

\Auth::loginUsingId("user", 1); // Login user with id 1

\Auth::loginUsingId("admin", 1); // Login admin with id 1

// Attempts to login user with email id johndoe@gmail.com 
\Auth::attempt("user", ['email' => 'johndoe@gmail.com', 'password' => 'password']);

// Attempts to login admin with email id johndoe@gmail.com
\Auth::attempt("admin", ['email' => 'johndoe@gmail.com', 'password' => 'password']); 

获取更详细的文档

http://sarav.co/blog/multiple-authentication-in-laravel/

http://sarav.co/blog/multiple-authentication-in-laravel-continued/