Laravel - перенаправить пользователя на предыдущую страницу после успешного входа - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь перенаправить пользователя обратно на предыдущую страницу после успешного входа в систему. Для этого в LoginController.php я добавил функцию redirectTo() как таковую:

protected function redirectTo()
{
   return url()->previous();
}

После этого я попытался войти в систему, но после успешного входа я перенаправлен на домашнюю страницу. (/).

Когда я сделал dd(url()->previous()) в функции redirectTo(), я обнаружил, что предыдущий URL был http://localhost/login. Таким образом, пользователь был перенаправлен на страницу login, которая затем была перенаправлена ​​на страницу home.

Я также пытался return redirect()->back() в функции redirectTo(), но я получил следующую ошибку

Заголовок не может содержать более одного заголовка, обнаружена новая строка

Я также пытался использовать authenticate() в LoginController

public function authenticate()
{
    if (Auth::attempt(['email' => $email, 'password' => $password])) {
        // Authentication passed...
        return redirect()->back();
    }
}

перенаправляет на /home (который не найден)
Использование return redirect()->intended() вместо return redirect()->back() дает тот же результат.

Как перенаправить пользователя на предыдущую страницу, на которой он был, когда он / она зашел на страницу входа?

Я по-прежнему хочу сохранить функциональность по умолчанию, при которой пользователь пытается получить доступ к маршруту с помощью auth Middlewate, он попадает на страницу входа и после успешного входа перенаправляется на страницу, на которую он намеревался зайти. первое место.

Ответы [ 3 ]

0 голосов
/ 16 января 2019
Redirect::back()
back()
redirect()->back()
redirect()->previous()

одинаковы, и они возвращают вас на предыдущую страницу. то, что вы можете сделать, это отправить URL-адрес возврата в качестве параметра или поместить его в сеанс, после завершения аутентификации перенаправьте его на этот URL-адрес.

redirect()->to($request->input('returnUrl'))

Для перенаправления на дом это жестко закодировано в "App \ Http \ Middleware \ RedirectIfAuthenticated.php"

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect('/home');
        }

        return $next($request);
    }

Вы также должны прочитать о свойствах в PHP.

0 голосов
/ 11 июня 2019

Я работал следующим образом:

In LoginController

public function redirectTo(){
    if (request()->has('previous')) {
        $this->redirectTo = request()->get('previous');
    }
    return $this->redirectTo ?? '/defaultPath';
}

Метод request()->has('previous') проверяет, существует ли прежний путь в сеансе, если не существует, перенаправить на путь по умолчанию.

0 голосов
/ 16 января 2019

Вы можете сделать это с помощью глобальной вспомогательной функции back.

return back()->withInput();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...