Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php loggedIn-laravel之后登录路由上的自定义登录重定向_Php_Redirect_Laravel 5_Login - Fatal编程技术网

Php loggedIn-laravel之后登录路由上的自定义登录重定向

Php loggedIn-laravel之后登录路由上的自定义登录重定向,php,redirect,laravel-5,login,Php,Redirect,Laravel 5,Login,我正在为我的大学创建学生门户 此门户中有多个用户,例如学生、教师、员工和管理人员 我已经成功创建了基于多个用户的自定义登录重定向 例如 当学生登录时,他在localhost:8000/学生/仪表板上重定向,同样,教师在localhost:8000/教师/仪表板上重定向 .. 登录后,LoginController.php工作正常 public function redirectTo() { $userRollId = Auth::user()->user_role_id;

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

此门户中有多个用户,例如学生、教师、员工和管理人员

我已经成功创建了基于多个用户的自定义登录重定向 例如 当学生登录时,他在localhost:8000/学生/仪表板上重定向,同样,教师在localhost:8000/教师/仪表板上重定向 ..

登录后,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';       
    }
}
但在测试我的应用程序时,我面临着这个问题

那是什么 我以学生身份登录,登录后重新定向

当我点击localhost:8000/登录时进行测试 它重定向到localhost:8000/home 它应该在localhost:8000/学生/仪表板上重定向,但不能:

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


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

我假设您正在使用laravel的LoginController。在LoginController中,它将来宾中间件连接到除注销之外的所有路由

因此,您必须将代码添加到\App\Http\Middleware\RedirectIfAuthenticated类

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

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';
            }
        }
    }
}
这样称呼它:

从控制器:

从RedirectIfAuthenticated中间件:


您是否使用laravel Auth中间件?检查您的Auth控制器是否有受保护的变量$redirecTo您必须更改它是否在登录路径中使用来宾中间件?请检查是否使用echo$userRollId调用redirecTo函数;死亡请向我们展示您控制器中的登录函数感谢它的工作原理:我只需稍微修改一下您的代码,它的工作原理就如我所愿:RedirectIfAuthenticated.php if Auth::guard$guard->check{$userRollId=Auth::user->user\u role\u id;if$userRollId==1{return redirect->route'administrationDashboard';}……}返回$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);
}
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);
}