2016-03-08 119 views
2

有多个用户,拥有完全不同的后登录面板。一个教师和其他学生。我让中间件分开他们的观点。中间件检查名为实体的属性(数据库中的列)是“学生”还是“公司”,并相应地限制或允许视图。是的,访客不允许登录后面板。Laravel 5 - 注册后重定向到URL

我使用同一个表来保存登录。 (实体栏目是否区分其教师或学生)。现在我想将用户重定向到不同的视图。如果我改变$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是在应用\用户功能,其与真或假检查在数据库实体列值作出响应。

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

+0

'$请求 - >用户()'是无效的错误说 - 看看在[路由文档(https://开头laravel。 COM /文档/ 5.2 /路由#路线模型结合)。 – ash

+0

感谢让我检查@ash,并且有一件事是我的想法是正确的动态路由?它会工作吗? –

+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"); 
    } 
} 
+0

你想改变供应商/这个文件中的symfony/http-kernel/DataCollector/RouterDataCollector.php? –

+0

除非没有其他选项,否则我不会触摸供应商中的任何文件。我想象这种方法在你的控制器中进行,并创建一个URL,如'/ controller/redirect',你可以将它设置为'$ redirectTo'的值 –