Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
версия 5.0.35
пытаюсь заюзать авторизацию из коробки, но проблема в том, что меня постоянно редиректит на /home после авторизации.
в доках написано, что нужно в PasswordController добавить
protected $redirectTo = '/';
но не помогает.
Пытался добавить в app/Http/Controllers/Auth/AuthController.php, опять же не помогает
увидел файл в app/Http/Controllers/Middleware/RedirectIfAuthenticated.php, там строка
if ($this->auth->check())
{
return new RedirectResponse(url('/home'));
}
return $next($request);
пытался там менять, не помогает
увидел, что редирект происходит в файле app/Http/Controllers/Middleware/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');
}
}
return $next($request); // вот тут
}
но как задать адрес редиректа? и где?
Не в сети
если в файле app/Http/Controllers/Middleware/RedirectIfAuthenticated.php
заменить
if ($this->auth->check())
{
return new RedirectResponse(url('/home'));
}
return $next($request);
на
if ($this->auth->check())
{
return new RedirectResponse(url('/'));
}
return $next($request);
то сайт падает с ошибкой Сайт ***.ru выполнил переадресацию слишком много раз.
Не в сети
В Laravel давно эта проблема, никак по-человечески сделать не могут.
Перезапиши (не знаю как по-русски грамотно) метод sendLoginResponse() в LoginController.php
Не в сети
В Laravel давно эта проблема, никак по-человечески сделать не могут.
Перезапиши (не знаю как по-русски грамотно) метод sendLoginResponse() в LoginController.php
но у меня нет такого файла
Не в сети
А если поиском по проекту пройтись, по $redirectTo = '/home' или даже лучше просто '/home'?
Кажется, если в каких-то контроллерах это явно не указано, он от какого-то родителя наследует.
С другой-то стороны, так уж плохо, что он в контроллерах позволяет этим свойством рулить? Можно редиректить в зависимости от ситуации. Или что-то не так?
Изменено Androbim (11.10.2016 18:44:15)
Не в сети
А если поиском по проекту пройтись, по $redirectTo = '/home' или даже лучше просто '/home'?
Кажется, если в каких-то контроллерах это явно не указано, он от какого-то родителя наследует.
С другой-то стороны, так уж плохо, что он в контроллерах позволяет этим свойством рулить? Можно редиректить в зависимости от ситуации. Или что-то не так?
в том-то и дело, что не позволяет рулить! уже час пытаюсь различные переменные задавать и в тупую переопределять методы - ничего, просто редиректит на home и все!
в контроле версий у меня нет папки vendor, но там есть трейт, который вроде как должен рулить этим, но все-равно никак не реагирует
Не в сети
но у меня нет такого файла
Извиняюсь, версию не увидел. Посмотри по аналогии. В 5.1-5.2, например, это Auth/AuthController.php (возможно и в 5.0 он же). Смотри какие трейты он использует и ищи в vendor эти трейты. Так ты найдешь метод, который отвечает за сам логин пользователя. В конце меняй редирект на что душе угодно (только не в трейте, а в app\Http\Controllers\Auth\AuthController.php или подобном).
Скорее всего тебе нужен тот же метод, о котором я писал выше, попробуй его сначала поиском в папке vendor найти.
Изменено AlexeyMezenin (11.10.2016 18:50:08)
Не в сети
Вот я еще где менял, в миддлваре guest.
if (Auth::guard($guard)->check()) {
return redirect('/home');
Не в сети
respectpick пишет:но у меня нет такого файла
Извиняюсь, версию не увидел. Посмотри по аналогии. В 5.1-5.2, например, это Auth/AuthController.php (возможно и в 5.0 он же). Смотри какие трейты он использует и ищи в vendor эти трейты. Так ты найдешь метод, который отвечает за сам логин пользователя. В конце меняй редирект на что душе угодно (только не в трейте, а в app\Http\Controllers\Auth\AuthController.php или подобном).
Скорее всего тебе нужен тот же метод, о котором я писал выше, попробуй его сначала поиском в папке vendor найти.
в общем, нашел этот трейт, там есть метод
public function redirectPath()
{
if(property_exists($this, 'redirectPath'))
{
return $this->redirectPath();
}
return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}
если пытаюсь переопределить у себя его, ловлю ошибку
TokenMismatchException in VerifyCsrfToken.php
В методе явно видно, что он ищет в свойствах redirectPath или redirectTo, но при объявлении этих свойств вообще никакой реакции на происходящее, тупо редиректит на home и все
Не в сети
Не думаю, что переопределение метода - причина TokenMismatchException. Попробуй переопределить метод, который именно уже перенаправляет пользователя после входа. Насколько я помню, с redirectPath() у меня тоже в 5.1 не сработало.
Не в сети
5.3
Поменял в middleware RedirectAuthenticated.php
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/'); //Здесь было /home
}
return $next($request);
}
Вроде бы, все нормально.
Не в сети
Поменял в middleware RedirectAuthenticated.php
Поправочка, RedirectIfAuthenticated
Не в сети