当前位置: 首页 > 知识库问答 >
问题:

有人可以用例子解释Laravel 5.2多身份验证吗

彭华皓
2023-03-14

我正在尝试分别对用户和管理员表单usertable和admintable进行身份验证。我正在使用laravel提供的“开箱即用”的User模型,并为Admin创建了相同的模型。我在auth.php中添加了一个保护密钥和提供者密钥。

卫兵

'guards' => [
    'user' =>[
        'driver' => 'session',
        'provider' => 'user',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admin',
    ],
],  

提供者

'providers' => [
    'user' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'admin' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ]
],

路线

Route::group(['middleware' => ['web']], function () {
    // Login Routes.   
    Route::get('/admin/login','AdminAuth\AuthController@showLoginForm');
    Route::post('/admin/login','AdminAuth\AuthController@login');
    Route::get('/admin/logout','AdminAuth\AuthController@logout');

    // Registration Routes.
    Route::get('admin/register', 'AdminAuth\AuthController@showRegistrationForm');
    Route::post('admin/register', 'AdminAuth\AuthController@register');

    Route::get('/admin', 'AdminController@index');
});

我创建了一个名为AuthAdmin的目录,其中存在Laravel的默认AuthController.phpPasswordController.php文件。(名称空间相应修改)

Laravel的文档中提到的另一种方法是使用一个不起作用的防护装置。

如果有人能解决问题,如果我错了,纠正我,那将是有益的。

共有3个答案

阎建德
2023-03-14

这在拉威尔5.6中非常简单。只需转到config/auth.php并将此行添加到providers数组中:

'admins' => [
   'driver' => 'database',
   'table' => 'admin_table'
]

请注意,我们使用数据库作为驱动程序,而不是雄辩的

现在将其添加到guardsarray:

'admin_guard' => [
   'driver' => 'session',
   'provider' => 'admins'
]

现在我们完成了!使用admins表时使用此选项:

Auth::guard('admin_guard')->User();

干杯

宦博雅
2023-03-14

如果这对任何人都有帮助,这可能是因为我对中间件缺乏了解,下面是我必须做的事情来让它工作(除了@imrealashu采取的步骤)。。。

route.php中:

Route::get('/admin', [
  'middleware' => 'admin',
  'uses' => 'AdminController@index'
]);

这在web中间件组中。在此之前,我尝试将它放在一个单独的admin中间件组中,甚至放在一个auth: admin组中,但这并不起作用,只有当我在路由本身中将中间件指定为admin时,它才对我起作用。我不知道这是为什么,但我希望这能避免其他人像我一样拔掉头发。

颛孙哲
2023-03-14

经过大量的挖掘和大量的问题

如何在Laravel 5.2中实现多重身份验证

如上所述。两个表adminuser

Laravel 5.2有一个新的artisan命令。

php artisan make: auth

它将为用户表生成基本登录/注册路由视图控制器

为了简单起见,将一个admin表作为user表。

Controller For Admin
app/Http/Controller/AdminAuth/AuthController
app/Http/Controller/AdminAuth/PasswordController
(注意:我只是从这里复制了这些文件)

config/auth.php

//Authenticating guards
'guards' => [
    'user' =>[
        'driver' => 'session',
        'provider' => 'user',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admin',
    ],
],  

//User Providers
'providers' => [
    'user' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'admin' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ]
],  

//Resetting Password  
'passwords' => [
    'clients' => [
        'provider' => 'client',
        'email' => 'auth.emails.password',
        'table' => 'password_resets',
        'expire' => 60,
    ],
    'admins' => [
        'provider' => 'admin',
        'email' => 'auth.emails.password',
        'table' => 'password_resets',
        'expire' => 60,
    ],
],  

route.php

Route::group(['middleware' => ['web']], function () {
    //Login Routes...
    Route::get('/admin/login','AdminAuth\AuthController@showLoginForm');
    Route::post('/admin/login','AdminAuth\AuthController@login');
    Route::get('/admin/logout','AdminAuth\AuthController@logout');

    // Registration Routes...
    Route::get('admin/register', 'AdminAuth\AuthController@showRegistrationForm');
    Route::post('admin/register', 'AdminAuth\AuthController@register');

    Route::get('/admin', 'AdminController@index');

});  

AdminAuth/AuthController.php

添加两个方法并指定$reDirectTo$Guard

protected $redirectTo = '/admin';
protected $guard = 'admin';
public function showLoginForm()
{
    if (view()->exists('auth.authenticate')) {
        return view('auth.authenticate');
    }

    return view('admin.auth.login');
}
public function showRegistrationForm()
{
    return view('admin.auth.register');
}  

它将帮助您打开另一个管理员登录表单

admin创建中间件

class RedirectIfNotAdmin
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @param  string|null  $guard
 * @return mixed
 */
public function handle($request, Closure $next, $guard = 'admin')
{
    if (!Auth::guard($guard)->check()) {
        return redirect('/');
    }

    return $next($request);
}

}

kernel.php中注册中间件

 protected $routeMiddleware = [
    'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class,
];

AdminController中使用此中间件,例如。,

 类似资料:
  • 个人身份验证 (PIV) Yubikey 支持个人身份验证 (PIV 和 FIPS 201) 智能卡接口 (NIST SP 800-73)。根据智能卡上存储的私钥,通过 PKCS#11 一类的通用接口进行RSA 或者 ESS 的签名、加密、解密操作。

  • 问题内容: 我有一个主要的领域:,子:,和其他领域,。 现在完成如下操作: login.php 在每个页面上添加: logout.php 但它仅适用于域及其子域,。 我需要以某种方式保存会话和其他域,。 如何最好地进行安全身份验证,如果有解决方案,我真的很困惑,请举例说明。 问题答案: 据我所知,跨子域之间的会话很好,但不会延续到整个新域。为此,您需要某种集中式数据方法或API。 数据库方法: 您

  • 问题内容: 越来越多地使用Python,并且不断看到在不同文件中设置的变量。有人可以解释这是什么吗? 问题答案: 这是该模块的公共对象的列表,由解释import 。它覆盖了默认的内容,即隐藏以下划线开头的所有内容。

  • null 原因:javax.net.ssl.sslhandShakeException:在java.base/sun.security.ssl.alert.createsslException(Alert.java:128)在java.base/sun.security.ssl.alert.createsslException(Alert.java:117)在java.base/sun.secur

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • 我试图为AWS实现“开发人员身份验证身份”,如下所示:https://AWS.amazon.com/blogs/mobile/amazon-cognito-innecling-developer-authenticated-identities/ 我很好地理解了基本流程。 我怎样才能做到这一点?