有多个用户使用完全不同的帖子登录面板。一个给老师,另一个给学生。我制作了中间件来分离他们的视图。中间件检查属性(数据库中的列)命名实体是"学生"还是"公司",并相应地限制或允许视图。是的,访客不允许进入任何一个帖子登录面板。
我正在使用同一张表来保存登录名。(实体列区分它是教师还是学生)。现在我想将用户重定向到不同的视图。如果我改变$redirectTo = "/studentPanel"
.中间件行为,教师登录无法访问此。但是如果我$redirectTo = "/teacherPanel"
硬编码,那么学生帖子登录面板是无法访问的。
如何动态设置$redirectTo
。我想到设置身份验证控制器的构造方法。
试过这个:
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中的函数,它们以真或假检查数据库中的实体列值来响应。
我是这样想的,我得到错误"Call to a member function isStudent() on a non-object"
您需要
将$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");
}
}