【发布时间】:2016-08-16 15:12:26
【问题描述】:
我想在我的 laravel 项目中进行多重身份验证。
我在我的 auth.php 文件中创建了新的守卫“admin”,但我不知道如何在我的 authcontroller 中设置新创建的守卫。
它总是使用我的 auth.php 中的“默认”设置:
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
【问题讨论】:
我想在我的 laravel 项目中进行多重身份验证。
我在我的 auth.php 文件中创建了新的守卫“admin”,但我不知道如何在我的 authcontroller 中设置新创建的守卫。
它总是使用我的 auth.php 中的“默认”设置:
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
【问题讨论】:
1) 如果您希望在整个应用程序中使用新创建的admin 保护,您可以更改配置文件的 defaults 中的值。
2) 如果只是AuthController使用Laravel内置的Auth系统,可以在AuthController.php和PasswordController.php中加入这一行:
protected $guard = 'admin';
Ref - 检查 Guard 自定义 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
}
【讨论】:
Laravel 5.4+ 在任何 Auth Controller 中使用以下内容:
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
【讨论】: