Laravel Auth Issue with multi auth



我已经在Laravel中为管理员和用户使用Two Tables进行了Multi-AUTH,但在登录时,如果我在将我记录到Dashboard的表单中键入任何密码,以及如果我试图访问Dashboard中的任何链接,则会出现验证错误,将我重定向回登录?

登录控制器LoginController重定向至"如果已验证RedirectIfAuthenticated">
"验证Authenticate">
AUTHAuth file
路由Admin Route

登录错误

仔细查看您的LoginToDashboard功能。您已经声明了名为admins的卫士,但当您签入此函数时,您正试图使用名为Admin的卫士。所以,它与你宣布的守卫不匹配。所以您可以将LoginToDashboard功能设置为这样->

//perform login here
public function LoginToDashboard(Request $request){
//validation part
$this->validate($request,[
'email'=>'required|email',
'password'=>'required|min:8'
]);
//need to match your user's credentials
if(Auth::guard('admin')->attempt(['email'=>$request->email,'password'=>$request->password],$request->remember)){
return redirect()->intended(route('admin.dashboard'));
}
return redirect()->back()->withInupt($request->only('email','remember'));
}

现在让您的auth.php页面像这样->

'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],

现在,来到名为RedirectIfAuthenticated的页面,并对句柄函数进行如下更改->

public function handle($request, Closure $next, $guard = null)
{
switch ($guard){
case 'admin':
if(Auth::guard($guard)->check()){
return redirect()->route('admin.dashboard');
}
break;
default:
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
break;
}

return $next($request);
}
}

最后谈到这一部分,即如果用户没有通过身份验证,那么方法是什么。您可以在handler.php页面中添加这样的函数

protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['message' => $exception->getMessage()], 401);
}
$guard=Arr::get($exception->guards(),0);
switch($guard){
case'admin':
$login='admin/login';
break;
default:
$login='login';
break;
}
return redirect()->guest($login);
}

我想你已经得到了答案。让我知道你的进一步改进。

最新更新