如何对 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/
有时,我们希望将用户和管理员分开放在不同的 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/