让多个用户拥有完全不同的帖子登录面板。一个用于教师,另一个用于学生。我制作了中间件以分离他们的观点。中间件检查名为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"
答案 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");
}
}