php - Laravel RedirectIfAuthenticated
问题描述
我有问题,当用户使用 laravel 6 中的中间件按角色登录到他们的仪表板时,我试图重定向用户。但我被困在这种情况下无法弄清楚问题出在哪里。请帮忙,谢谢。
每个角色都有这个路由web.php
Route::group([ 'as'=>'user.', 'prefix'=>'user', 'namespace'=>'User', 'middleware'=>['auth','user']],
function(){
Route::get('dashboard', 'DashboardController@index')->name('dashboard');
});
中间件看起来像
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->role->id == 3 ) {
return $next($request);
}else{
return redirect()->route('login');
}
}
重定向IfAuthenticated
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check() && Auth::user()->role->id == 1 ) {
return redirect()->route('admin.dashboard');
}elseif (Auth::guard($guard)->check() && Auth::user()->role->id == 2) {
return redirect()->route('author.dashboard');
}elseif (Auth::guard($guard)->check() && Auth::user()->role->id == 3) {
return redirect()->route('user.dashboard');
}else{
return $next($request);
}
和登录控制器
public function __construct()
{
if (Auth::check() && Auth::user()->role->id == 1 ) {
$this->redirectTo = route('admin.dashboard');
}elseif (Auth::check() && Auth::user()->role->id == 2 ) {
$this->redirectTo = route('author.dashboard');
}elseif (Auth::check() && Auth::user()->role->id == 3 ) {
$this->redirectTo = route('user.dashboard');
} else {
$this->middleware('guest')->except('logout');
}
}
解决方案
您的第一个中间件检查用户是否已登录以及他是否具有角色 3。
也许将其更改为:
public function handle($request, Closure $next)
{
if (Auth::check()) {
return $next($request);
}else{
return redirect()->route('login');
}
}
推荐阅读
- razorpay - 如何使用 Razorpay 托管结帐表单启用 EMI 选项?
- amazon-web-services - 如何在无服务器中使用带有 GetAtt 的 Sub 函数?
- r - 将数据转换为起止/长格式
- android - 如何在自定义视图中获取 android:layout_width 和 android:layout_height?
- mobile - 如何修复汉堡菜单不向右移动?
- python - _name_estimators 在下面的代码中做了什么?
- class - python分数程序中的问题
- c# - 如何使用 ASP.NET 将 base 64 字符串保存到图像
- php - 如何编译带有附加扩展名的 php
- python - Python - 比较两个字典,创建一个新字典,其中包含仅出现在一个字典中的唯一项