我是Laravel框架的绝对初学者。 我正在处理中间件问题。
下面结合使用AdminController.php中的authenticate.php和__construct函数,我无法登录并且必须处理ERR_TOO_MANY_REDIRECTS错误。
有没有人遇到过这种问题? 如果有,我可以提出任何建议来解决这个问题吗?
英语不是我的第一语言,所以如果这篇文章没有意义或者您需要更多信息,请留下您的意见! 任何意见,将不胜感激!提前谢谢!
Authenticate.php
public function handle($request, Closure $next){
if ($this->auth->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
}
else {
return redirect()->guest('auth/login');
}
}
if ($this->whoIsLoggedIn() == 'instructor'){
return redirect('/instructor/home');
} elseif ($this->whoIsLoggedIn() == 'admin') {
return redirect('/admin/home');
} elseif ($this->whoIsLoggedIn() == 'student') {
return redirect('/student/home');
} elseif($this->whoIsLoggedIn() == 'unknown'){
return redirect('/auth/login');
}
return $next($request);
}
public function whoIsLoggedIn(){
$identity = '';
foreach (\Auth::user()->roles as $role) {
if ($role->name == 'admin') {
return $identity = 'admin';
} else if ($role->name == 'instructor') {
return $identity = 'instructor';
} else if ($role->name == 'student'){
return $identity = 'student';
} else {
return $identity = 'unknown';
}
}
}
AdminController.php
public function __construct(){
$this->middleware('auth');
}
答案 0 :(得分:1)
如果仔细观察,您的代码实际上实现了无限重定向循环 - 一旦用户登录,您的中间件类将始终重定向用户。由于下一页可能应用了相同的中间件 - 用户将被反复重定向。
在某些时候,你的中间件应该只是调用链中的下一个中间件:
return $next($request);
这将完成中间件链,如果一切正常,最后将控件发送到您的页面。
您尝试实现的内容(经过身份验证的用户的默认起始页)可能应该在您的AuthController中而不是此中间件中。此中间件不知道用户是刚刚登录还是已经过一段时间的身份验证。
我建议你将重定向条件移动到AuthController的postLogin()方法,这样它只会发生一次 - 当用户真正登录时。你几乎可以复制粘贴大部分代码。