laravel - 多重身份验证的 Laravel 身份验证问题
问题描述
我已经在 Laravel 中为管理员和具有两个表的用户进行了多重身份验证,但是在登录时,如果我输入任何密码,表单将我记录到仪表板,加上如果我尝试从仪表板访问任何链接,则将我重定向回登录?
LoginController LoginController
Redirect If Authenticated RedirectIfAuthenticated
Authenticate Authenticate
AUTH Auth file
RouteAdmin 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);
}
我想你得到了答案。让我知道您的进一步改进。
推荐阅读
- r - data.table:根据指标列值和名称创建新的字符列
- c# - 获取 CarrouselView 中被点击的 Element 的索引
- ios - MKAnnotation 没有出现
- windows - Powershell:将指定目录中的所有文件放入单独的、唯一命名的子目录中
- javascript - 如何在创建用户时将其添加到“用户”Firestore 中?
- reactjs - 为什么我们应该避免组件构造函数中的副作用?
- python - 如何在同一虚拟环境中将私人使用的包与与项目相关的包分开?
- prolog - Prolog,动态规划,斐波那契数列
- ansible - 仅使用 selectattr 的条件 set_fact?
- java - 哪个注释仅用于接受数字作为输入?