登录后的登录路线上的自定义登录重定向 - laravel

时间:2017-04-17 08:48:16

标签: php redirect laravel-5 login

我正在为我的大学创建学生门户网站。

此门户网站中有多个用户,例如学生,教师,员工和&施用

我已成功创建基于Multiply Users的自定义登录重定向 例如 当学生登录时,他重定向到localhost:8000 / student / dash-board同样的老师重定向在localhost:8000 / teacher / dash-board .. ..

LoginController.php(登录后完美运行)

   public function redirectTo()
{
    $userRollId = Auth::user()->user_role_id;

    if( $userRollId == 1)
    {
           return route('administrationDashboard');
    }
    elseif ($userRollId == 2) {

            return route('teacherDashboard');
    }
    elseif ($userRollId == 3) {
            return route('studentDashboard');
    }
    elseif ($userRollId == 4) {
            return route('departmentalStaffDashboard');
    }
     elseif ($userRollId == 4) {
            return 'departmentalStaff/dashboard';       
    }
}

但在测试我的应用程序时,我遇到了问题。

高级就是这样 我以学生身份登录并在登录后重定向 http://localhost:8000/student/dash-board

当我点击localhost:8000 / login时进行测试 它重定向到localhost:8000 / home 它应该重定向到localhost:8000 / student / dash-board但不是:(

我认为LoginController逻辑在登录后不适用于此。 也许LoginController逻辑只在我们尝试登录时才应用。

所以有任何解决方案或建议吗?

1 个答案:

答案 0 :(得分:1)

我假设您使用的是LoginController laravel。在LoginController中,它将guest中间件附加到除logoutCheck Here)之外的所有路由。

所以你必须将代码添加到\App\Http\Middleware\RedirectIfAuthenticated类。

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {
        $userRollId = Auth::user()->user_role_id;

        if( $userRollId == 1)
        {
            return route('administrationDashboard');
        }
        elseif ($userRollId == 2) {

            return route('teacherDashboard');
        }
        elseif ($userRollId == 3) {
            return route('studentDashboard');
        }
        elseif ($userRollId == 4) {
            return route('departmentalStaffDashboard');
        }
        elseif ($userRollId == 4) {
            return 'departmentalStaff/dashboard';
        }
    }

    return $next($request);
}

更好的是创建一个静态函数:

Class Helper {
    public static function redirectByRole($userRollId) {
        if( $userRollId == 1)
            {
                return route('administrationDashboard');
            }
            elseif ($userRollId == 2) {

                return route('teacherDashboard');
            }
            elseif ($userRollId == 3) {
                return route('studentDashboard');
            }
            elseif ($userRollId == 4) {
                return route('departmentalStaffDashboard');
            }
            elseif ($userRollId == 4) {
                return 'departmentalStaff/dashboard';
            }
        }
    }
}

并称之为:

来自您的控制器:

public function redirectTo()
{
    $userRollId = Auth::user()->user_role_id;

    return Helper::redirectByRole($userRollId);
}

来自RedirectIfAuthenticated中间件:

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {
        $userRollId = Auth::user()->user_role_id;

        return Helper::redirectByRole($userRollId);
    }

    return $next($request);
}