Как избежать перенаправления входа в Laravel на последний AJAX-вызов? - PullRequest
0 голосов
/ 07 июня 2018

На странице происходит несколько запросов AJAX, и если пользователь входит в систему, пользователь перенаправляется на последний URL-адрес с помощью следующего фрагмента:

public function showLoginForm()
{
    if(!session()->has('url.intended')) {
        session(['url.intended' => url()->previous()]);
    }
    return view('auth.login');
}

Этот URL-адрес может быть AJAX, возвращающим некоторый JSON,Как мне избежать предполагаемого URL-адреса, являющегося ajax?Я, очевидно, хочу, чтобы он перенаправлял на реальную предыдущую страницу вместо случайного вызова ajax.Это единственный способ избежать этого, просто сохранив URL-адрес перенаправления в качестве параметра запроса, например /login?redirect_uri=/go-here-after-login?

Кроме того, если у вас совершенно другой подход, я весь слух.

Спасибо!

1 Ответ

0 голосов
/ 07 июня 2018

Вам следует использовать redirect()->intended() для своих целей.

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

Когда этот пользователь входит в систему, вы можете перенаправить его на его предполагаемую страницу или резервную страницу по вашему выбору, используя redirect()->intended().Например:

class LoginController
{
    public function handleLogin()
    {
        if (Auth::attempt(request()->only(['email', 'password']))) {
            return redirect()->intended('/your/fallback/url');

            // Or if you want to get a URL by its route name:
            // return redirect()->intended(route('route.name'));
        }

        // Handle what happens if the user's credentials were incorrect
    }
}

Насколько мне известно, каждый URL, который посещает пользователь (через AJAX или иным способом), не должен храниться в сеансе, а только когда промежуточное ПО Authпинает в том, что заданный URL-адрес установлен.

В вашем коде вы используете url()->previous(), который перенаправляет пользователя на его реферер (страница, которая инициировала запрос, т.е. предыдущая страница), а не предполагаемый URL-адрес, сохраненный в сеансе.

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