我是Laravel框架的绝对初学者。我正在处理一个中间件问题。
使用下面AdminController.php中的authenticate.php和__construct函数,我无法登录,必须处理ERR_TOO_MANY_REDIREECTS错误
有人遇到过这种问题吗?如果你有,我能给你什么建议来解决这个问题吗?
英语不是我的第一语言,所以如果这篇文章没有意义,或者你需要更多信息,请留下你的评论!任何建议都将不胜感激!提前感谢!
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');
}
如果你仔细看,你的代码实际上实现了一个无限重定向循环——一旦用户登录,你的中间件类总是会进一步重定向用户。由于下一个页面可能应用了相同的中间件,用户将被一次又一次地重定向。
在某种程度上,您的中间件应该只是调用链中的下一个中间件:
return $next($request);
这将完成中间件链,如果一切正常,最终将控制权交给您的页面。
您试图实现的内容(经过身份验证的用户的默认起始页)可能应该在AuthController中,而不是这个中间件中。这个中间件不知道用户是刚刚登录还是已经验证了一段时间。
我建议你将重定向条件移动到AuthController的postLogin()方法,这样它只会发生一次——当用户真正登录时。你几乎可以复制粘贴大部分代码。