我是创建到用户登录和管理登录。用户登录为使用默认的laravel身份验证和管理,为我的创建警卫。它的工作原理很完美。没有任何问题来运行我的代码,只有一个问题,当我作为一个用户登录和登录后的管理,然后也显示用户是登录。
congig\auth.php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'admin-api' => [
'driver' => 'token',
'provider' => 'admins',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 15,
],
],
];
App\Exception\Handler.php
protected function unauthenticated($request, AuthenticationException
$exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
$guard=array_get($exception->guards(), 0);
switch ($guard) {
case 'admin':
$login='admin.login';
break;
default:
$login='login';
break;
}
return redirect()->guest(route($login));
}
路由器
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Route::prefix('admin')->group(function(){
Route::get('/login','Auth\AdminLoginController@showLoginForm')-
name('admin.login');
Route::post('/login','Auth\AdminLoginController@login')-
name('admin.login.submit');
Route::get('/', 'AdminController@index')->name('admin.dashboard');
});
发布于 2018-02-14 10:28:05
首先,很明显,您使用多个守卫来验证不同类型的用户,所以当您通过标准的auth保护来验证一个Simple
用户时,当您想访问通过管理员保护(也就是Admin
用户)认证的用户可用的路由时,您需要首先验证自己,所以Laravel multiguard authentication
没有问题,您只是错误地实现了它,我建议您阅读更多关于警卫的内容,以及当您通过某些保护来访问用户时,然后尝试访问需要不同保护的路由。
https://stackoverflow.com/questions/48784826
复制相似问题