Laravel 5.6.12中管理员与用户登录重定向问题:找不到unauthenticated()函数
解决Laravel 5.6.12中管理员与普通用户登录后分别重定向且Handler.php无unauthenticated()的问题
嘿,我来帮你理清这个问题~首先得明确:Laravel 5.6.12的app/Exceptions/Handler.php默认确实没有自带unauthenticated()方法,这个方法是用来处理「未登录用户访问权限页面」的跳转逻辑;而你要实现的「管理员/普通用户登录后分别重定向」,核心逻辑其实在登录控制器里,下面分两部分给你讲清楚:
一、实现登录成功后的分角色重定向(核心需求)
默认登录逻辑在app/Http/Controllers/Auth/LoginController.php中,这个控制器继承了AuthenticatesUsers trait,我们可以通过重写两个方法来实现需求:
方法1:重写redirectTo方法(推荐,更简洁)
直接在LoginController.php中添加以下代码:
protected function redirectTo() { // 根据你的用户角色字段判断,比如假设用户表有`is_admin`布尔字段 if (auth()->user()->is_admin) { return '/admin/dashboard'; // 管理员登录后跳转的后台首页 } else { return '/user/profile'; // 普通用户登录后跳转的个人中心 } }
这个方法会在登录成功后自动触发,返回的路径就是用户最终跳转的地址。
方法2:重写authenticated方法(更灵活,支持额外逻辑)
如果需要在登录成功后执行一些额外操作(比如记录登录日志),可以用这个方法:
use Illuminate\Http\Request; protected function authenticated(Request $request, $user) { // 这里可以加额外逻辑,比如记录登录IP、时间等 // $user->last_login_ip = $request->ip(); // $user->save(); // 分角色跳转,用intended()可以保留用户之前访问的目标页面 if ($user->is_admin) { return redirect()->intended('/admin/dashboard'); } return redirect()->intended('/user/profile'); }
二、如果需要处理「未登录用户访问权限页面」的跳转(补充需求)
如果你希望未登录的用户访问后台时跳管理员登录页,访问普通页面时跳普通登录页,那你需要手动在Handler.php中添加unauthenticated()方法:
- 首先在Handler类顶部引入异常类:
use Illuminate\Auth\AuthenticationException;
- 然后添加方法:
protected function unauthenticated($request, AuthenticationException $exception) { // 处理API请求的情况,返回JSON if ($request->expectsJson()) { return response()->json(['error' => 'Unauthenticated.'], 401); } // 根据请求路径判断跳转的登录页 if ($request->is('admin/*')) { return redirect()->guest('/admin/login'); // 访问后台未登录,跳管理员登录页 } // 默认跳普通用户登录页 return redirect()->guest(route('login')); }
这样就能同时满足登录后分角色跳转,以及未登录时的权限跳转需求啦~
内容的提问来源于stack exchange,提问作者Ahsit Tamang
相关产品推荐
相关产品推荐

