Laravel 5.6 Перенаправление на предполагаемый URL после входа в систему не работает - PullRequest
0 голосов
/ 24 января 2019

На Laravel 5.6 Я работал с перенаправлением на целевой URL после входа в систему. Бизнес-кейс:

  1. Я пытаюсь перейти в / article / create, который требует входа пользователя в систему. в.

  2. Пользователь перенаправлен на форму регистрации по адресу /auth/login.

  3. Теперь пользователь входит в систему и перенаправляется обратно на свой целевой URL по адресу /article/create.

Мой код:

Для Url Previous Я использовал следующий код в LoginController.php и работал как талисман

    public function showLoginForm()
    {
        session(['link' => url()->previous()]);
        return view('auth.login');
    }
    protected function authenticated(Request $request, $user)
    {
        return redirect(session('link'));
    }

Для целевого URL, который я пытался использовать

session()->put('url.intended',url()->previous());

вместо

session(['link' => url()->previous()]);

Но это не работает, я получаю сообщение об ошибке:

Объект класса Illuminate \ Routing \ Redirector не может быть преобразован в строку

Дополнительно я попробовал redirect()->intended()->getTargetUrl(); getTargetUrl не существует. поэтому ошибка: метод Illuminate \ Routing \ UrlGenerator :: getTargetUrl не существует.

Даже я пытался с redirectTo: но, кроме того, у laravel нет функции redirectTo.

Честно говоря, я не знаю, как продолжить, и основываюсь на том факте, что в его зоне входа у меня есть некоторые проблемы безопасности, продолжающие изменять код.

Несмотря на то, что я читал много постов в SO, никто не определяет функциональный код для работы с заданным URL с помощью getTargetUrl.

1 Ответ

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

Проблема в том, что вы неправильно перенаправляете пользователя на intended url, правильный способ - использовать метод с именем intended и передавать маршрут default, если маршрут intended не найден (еслион возвращает 404), это что-то вроде запасного маршрута.

Надлежащее намеченное перенаправление можно найти в официальных документах, но я приведу пример для вашей реализации:

   /**
     * Handle an authentication attempt.
     *
     * @param  \Illuminate\Http\Request $request
     *
     * @return Response
     */
    public function authenticate(Request $request)
    {
        $credentials = $request->only('email', 'password');

        if (Auth::attempt($credentials)) {
            // Authentication passed...
            return redirect()->intended('article/create');
        }
    }

Приведенный выше метод разрешает даже ваш previous URL, так что вы можете удалить сохранение url внутри Session

PS: Возможно, это было не совсем понятно, но intended на самом деле сохраняет previous url for youпоэтому вам не нужно сохранять его самостоятельно, поэтому вы можете удалить свой код для saving previous url

РЕДАКТИРОВАТЬ: Чтобы сделать резервную копию моих претензий, вы можете взглянуть на эту ссылку Github Perma Laravel Router репо.

Чтобы всегда пересылать по одному и тому же маршруту, вы можете define a $redirectTo атрибут LoginController, который ALWAYS перенаправит пользователей на этот url.

public $redirectTo = '/home';

Но для того, чтобы это работало, вам нужно REMOVE реализация authenticated и authenticate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...