Laravel 5 - 注册后重定向到URL

时间:2016-03-08 13:25:33

标签: php laravel laravel-5.2

让多个用户拥有完全不同的帖子登录面板。一个用于教师,另一个用于学生。我制作了中间件以分离他们的观点。中间件检查名为entity的属性(数据库中的列)是'student'还是'company',并相应地限制或允许视图。是的,访客不允许进入任何一个登录后面板。

我使用相同的表来保存登录。 (实体专栏如果是教师或学生则区分)。现在我想将用户重定向到不同的视图。如果我改变$redirectTo = "/studentPanel"。中间件行为和教师登录无法访问此项。但是,如果我硬编码$redirectTo = "/teacherPanel",那么学生发布登录面板是不可访问的。

如何动态设置$redirectTo。我想到了设置auth控制器的构造方法。

试过这个:

public function __construct(Request $request ) {

$this->middleware('guest', ['except' => 'getLogout']);

if(Auth::user() && $request->user()->isStudent() )
    $this->redirectTo = "/studentPanel";
elseif(Auth::user() && $request->user()->isTeacher() )
    $this->redirectTo = "/teacherPanel";
else
      $this->redirectTo = "/auth/login";

}

此处isStudent()和isCompany是App \ User中的函数,它们使用true或false来检查数据库中的实体列值。

我这样想,我收到错误"Call to a member function isStudent() on a non-object"

1 个答案:

答案 0 :(得分:1)

您需要将$request->user()更改为Auth::user()

从那时起,我遇到了一个非常类似的问题,我当时发现的最佳解决方案是将$redirectTo设置为静态值,并在路径中找到用户是学生还是教师,适当重定向。

路线如下:

public function getRedirect()
{

    if (Auth::user() && Auth->user()->isStudent()) {
        return redirect("/studentPanel");
    } else if(Auth::user() && Auth->user()->isTeacher()) {
        return redirect("/teacherPanel");
    } else {
        return redirect("/auth/login");
    }
}