Php Laravel-Multiauth在Laravel 5.2中不起作用
我正在尝试在Php Laravel-Multiauth在Laravel 5.2中不起作用,php,authentication,laravel-5.2,Php,Authentication,Laravel 5.2,我正在尝试在laravel 5.2中实现多重身份验证。我在跟踪 MyAuth.php <?php return [ 'multi' => array( 'user' => array( 'driver' => 'eloquent', 'model' => 'App\User', 'table' => 'users', ), 'admin' => array( 'driver' => 'd
laravel 5.2
中实现多重身份验证。我在跟踪
MyAuth.php
<?php
return [
'multi' => array(
'user' => array(
'driver' => 'eloquent',
'model' => 'App\User',
'table' => 'users',
),
'admin' => array(
'driver' => 'database',
'model' => 'App\Admin',
'table' => 'tbl_admin_user',
)
),
'password' => [
'email' => 'emails.password',
'table' => 'password_resets',
'expire' => 60,
],
];
'providers' => [
/*
* Laravel Framework Service Providers...
*/
//Illuminate\Auth\AuthServiceProvider::class,
Ollieread\Multiauth\MultiauthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
Illuminate\Encryption\EncryptionServiceProvider::class,
Illuminate\Filesystem\FilesystemServiceProvider::class,
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class,
Illuminate\Pagination\PaginationServiceProvider::class,
Illuminate\Pipeline\PipelineServiceProvider::class,
Illuminate\Queue\QueueServiceProvider::class,
Illuminate\Redis\RedisServiceProvider::class,
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
Illuminate\Session\SessionServiceProvider::class,
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
],
/*
|--------------------------------------------------------------------------
| Class Aliases
|--------------------------------------------------------------------------
|
| This array of class aliases will be registered when this application
| is started. However, feel free to register as many as you wish as
| the aliases are "lazy" loaded so they don't hinder performance.
|
*/
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
'Blade' => Illuminate\Support\Facades\Blade::class,
'Cache' => Illuminate\Support\Facades\Cache::class,
'Config' => Illuminate\Support\Facades\Config::class,
'Cookie' => Illuminate\Support\Facades\Cookie::class,
'Crypt' => Illuminate\Support\Facades\Crypt::class,
'DB' => Illuminate\Support\Facades\DB::class,
'Eloquent' => Illuminate\Database\Eloquent\Model::class,
'Event' => Illuminate\Support\Facades\Event::class,
'File' => Illuminate\Support\Facades\File::class,
'Gate' => Illuminate\Support\Facades\Gate::class,
'Hash' => Illuminate\Support\Facades\Hash::class,
'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class,
'Password' => Illuminate\Support\Facades\Password::class,
'Queue' => Illuminate\Support\Facades\Queue::class,
'Redirect' => Illuminate\Support\Facades\Redirect::class,
'Redis' => Illuminate\Support\Facades\Redis::class,
'Request' => Illuminate\Support\Facades\Request::class,
'Response' => Illuminate\Support\Facades\Response::class,
'Route' => Illuminate\Support\Facades\Route::class,
'Schema' => Illuminate\Support\Facades\Schema::class,
'Session' => Illuminate\Support\Facades\Session::class,
'Storage' => Illuminate\Support\Facades\Storage::class,
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
],
];
当我运行这个项目时,我看到了错误
调用未定义的方法Illumb\Foundation\Application::bindShared()
在MultiauthServiceProvider.php第13行中
我将MultiAuthServiceProvider.php
更改为
$this->app->singleton('auth', function ($app) {
$app['auth.loaded'] = true;
return new \Ollieread\Multiauth\MultiManager($app);
});
现在我在截图中看到了这个错误
我不确定是什么试图实例化门门面,而不是创建这样的自定义多重身份验证,我建议您使用Laravel custom auth
guard
和authprovider
。老实说,第二种方法还没有经过测试,但我认为它应该有效
1。一个型号多个防护装置
在config/auth.php
上添加一个新的防护:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
// new guard for admin using the same model and table.
'admin' => [
'driver' => 'session',
'provider' => 'users',
],
],
然后使用auth:admin
对路由进行分组,当然,您还必须创建另一个中间件来检查当前用户是否是管理员用户。要获取经过身份验证的用户实例,您需要指定自定义保护:Auth::guard('admin')->user()
为了确保它工作正常,请创建两个路由组,一个使用auth
中间件,另一个使用auth:admin
中间件,当您在使用auth:admin
的路由上登录用户后,尝试访问其他路由组,您应该被要求再次登录
Route::group(['middleware' => 'auth'], function () {
Route::get('/', function () {
return 'You are logged in using guard: web';
});
});
Route::group(['middleware' => 'auth:admin'], function () {
Route::get('/admin', function () {
return 'You are logged in using guard: admin';
});
});
2。多种型号
再次在config/auth.php
上创建新的自定义提供程序:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class',
],
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
// new guard for admin using custom provider.
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
然后使用管理员
作为提供程序创建自定义保护:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class',
],
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
// new guard for admin using custom provider.
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
使用这种方法,您不需要创建自定义中间件,使用
auth:admin
应该可以。我尝试了这个答案中解释的Laravel
方法,但它只在用户表中注册我。您的意思是当您注册admin
用户时,它会转到users
表吗?如果是这样,则必须在AuthController
的create()
方法上仍然使用User
model。此外,对于管理员身份,必须在AuthController
上添加此属性protected$guard='admin'代码>