2016-05-11 5 views
0

Я являюсь абсолютным новичком в системе Laravel. Я имею дело с проблемой промежуточного программного обеспечения.Laravel 5.0 :: Ошибка промежуточного ПО (ошибка ERR_TOO_MANY_REDIRECTS)

С помощью функции authenticate.php и __construct в AdminController.php, приведенной ниже, я не могу войти в систему и иметь дело с ошибкой 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

Если вы посмотрите внимательно, код выполняет бесконечный цикл перенаправления - когда пользователь вошел в систему, ваше ПО промежуточного слоя класс всегда будет перенаправлять пользователя дальше. Так как следующая страница, вероятно, имеет одно и то же промежуточное ПО - пользователь будет перенаправлен снова и снова и снова.

В каком-то момент, вашем промежуточном слое должен просто вызвать следующие промежуточную программное обеспечение в цепи:

return $next($request); 

Это завершит промежуточную цепь, и, если все нормально, наконец, дать контроль на вашу страницу ,

То, что вы пытаетесь реализовать (начальная страница по умолчанию для аутентифицированных пользователей), вероятно, должна быть в вашем AuthController вместо этого промежуточного программного обеспечения. Это промежуточное программное обеспечение не знает, находится ли пользователь только для входа в систему или был аутентифицирован какое-то время.

Предлагаю переместить условия переадресации на метод postLogin() AuthController, чтобы он произошел только один раз - когда пользователь действительно входил в систему. Вы можете в значительной степени скопировать всю большую часть кода.

+0

Большое спасибо за ваш комментарий, Денис. Но я должен извиниться, потому что у authenticate.php уже был return $ next ($ request); после условия переадресации ... Мне не удалось скопировать весь код в файл php ... – ILoveBaymax

+0

Не имеет значения, если в любом случае не будет достигнуто - ваши аутентифицированные пользователи будут всегда перенаправляться снова и снова. Эта логика перенаправления должна произойти только один раз - после входа в систему –

+0

После просмотра вашего совета я отредактировал код, который наследует AuthController, а затем все работает так, как я этого хочу. Большое спасибо Денису! – ILoveBaymax

Смежные вопросы