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

时间:2016-05-11 22:51:06

标签: php laravel laravel-5

我是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');
}

1 个答案:

答案 0 :(得分:1)

如果仔细观察,您的代码实际上实现了无限重定向循环 - 一旦用户登录,您的中间件类将始终重定向用户。由于下一页可能应用了相同的中间件 - 用户将被反复重定向。

在某些时候,你的中间件应该只是调用链中的下一个中间件:

return $next($request);

这将完成中间件链,如果一切正常,最后将控件发送到您的页面。

您尝试实现的内容(经过身份验证的用户的默认起始页)可能应该在您的AuthController中而不是此中间件中。此中间件不知道用户是刚刚登录还是已经过一段时间的身份验证。

我建议你将重定向条件移动到AuthController的postLogin()方法,这样它只会发生一次 - 当用户真正登录时。你几乎可以复制粘贴大部分代码。