条件/开关在RedirectIfAuthenticated.php中不起作用

时间:2019-07-23 17:55:04

标签: authentication switch-statement laravel-5.8

我目前正在学习Laravel,这是一个全新的领域。所以您可能会遇到任何类型的错误(对此感到抱歉),尽管我对PHP感到满意。我试图搜索解决我的问题的方法,但是找不到。因此,请为我排除故障。

问题

我有2位用户,他们都有特定的角色。一个用户的角色是Admin,另一个用户的角色是Teacher。现在,如果管理员登录,则必须将他重定向到/admin,否则,如果用户登录的不是管理员(即他可能是教师),则应将他重定向到/home

为此,我在文件handle()内的app\Http\Middleware\RedirectIfAuthenticated.php方法中编写了以下代码。

if (Auth::guard($guard)->check()) {
    switch ( Auth::user()->role->name ) {
        case 'Admin':
            return redirect('/admin');
            break;

        default:
            return redirect( '/home' );
            break;
    }
}
return $next($request);

现在,当我尝试通过管理员用户或非管理员用户登录时,在两种情况下,每次都将我重定向到/home,而不是如果我是通过管理员登录,则重定向到/admin 。开关可能不起作用。现在,如果我通过编写dd( Auth::user()->role->name )打印用户的角色,它将返回预期的结果,如果登录的用户是admin,则返回Admin;如果登录的用户是非管理员,则返回Teacher

您可以在https://github.com/ahmedcgr/academy-ms

上检查我的项目文件

以下是我数据库中的屏幕截图: roles table

users table

任何类型的解决方案/提示/线索都可以理解。

更新 而不是使用

if (Auth::guard($guard)->check()) {
    switch ( Auth::user()->role->name ) {
        case 'Admin':
            return redirect('/admin');
            break;

        default:
            return redirect( '/home' );
            break;
    }
}
return $next($request);

我移除了开关,然后代码如下所示

if (Auth::guard($guard)->check()) {
    return redirect('/admin');
}
return $next($request);

它仍将我重定向到/home。这表明开关/条件可能没有问题。

0 个答案:

没有答案