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

时间:2015-03-22 08:52:00

标签: php laravel-5

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

所以我在寻找Laravel 5是否可行。

经过快速搜索,我发现很多人和我的问题一样 我找到了一些答案,但我认为它们中的任何一个都不够好。

因此,我花了一些时间深入研究源代码,最后找到了实现这一目标的方法。

3 个答案:

答案 0 :(得分:5)

在阅读以下内容之前,您应该具备Laravel 5中ServiceProvider,Facade和IoC的基本知识。我们继续。

根据Laravel的文件,您可以找到Facade' Auth'引用Illuminate\Auth\AuthManager,它有一个魔法__call()。您可以看到主要功能不在 AuthManager 中,而在Illuminate\Auth\Guard

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

1.我们需要创建一个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'); }); }

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

2.Facade:

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

3。将别名添加到内核:

{{1}}

希望这可能有所帮助。

答案 1 :(得分:2)

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

第1步:作曲家需要

首先,作曲家需要多声道包

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/

答案 2 :(得分:0)

有很好的处理多种身份验证的包。检查这些链接:
sboo multiauth package

mohamednagy/multiauth