Laravel 5.0::中间件问题(ERR_TOO_MANY_DIRECTS错误)


Laravel 5.0:: Middleware Issue (ERR_TOO_MANY_REDIRECTS error)

我是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()方法,这样它只会发生一次——当用户真正登录时。你几乎可以复制粘贴大部分代码。