Если я правильно понимаю вашу проблему, проблема заключается в том, что вы путаете предыдущий URL-адрес для предназначенного URL-адреса, когда вы пытаетесь указать URL-адрес для перенаправления вваш ответ JSON. предыдущий URL фактически ссылается на HTTP Referrer , а не на предполагаемый URL, который устанавливается в сеансе промежуточным программным обеспечением авторизации Laravel.
HTTP реферером является страницакоторый инициирует запрос.Если вы в данный момент находитесь на странице /foo
и щелкаете ссылку на страницу /bar
, для HTTP Referrer на /bar
будет /foo
.То же самое происходит, когда вы инициируете запрос AJAX, страница, на которой вы находитесь, будет ссылаться на конечную точку, которую вы нажимаете.В вашем случае ваша страница входа в систему инициирует запрос к вашему обработчику входа через AJAX.
Когда вы пытаетесь посетить страницу, защищенную аутентификацией промежуточного пользователя Laravel, именно тогда Laravel устанавливает значение для предназначен URL-адрес в сеансе, прежде чем перенаправить вас на страницу входа.Laravel сохраняет в сеансе предназначенный URL-адрес как url.intended
(как вы сможете увидеть в Illuminate\Routing\Redirector::intended
, что и вызывает redirect()->intended()
).Так что все, что вам нужно сделать, это захватить это из сеанса.
if ($request->ajax()) {
return response()->json([
'auth' => $auth,
'intended' => session()->pull('url.intended') ?: URL::route('dashboard'),
'errors' => $errors
]);
}
return redirect()->intended(URL::route('dashboard'));
Примечание: Использование ->pull
удалит элемент из сеанса после его извлечения.
Более простой способ сделать это - просто получить целевой URL-адрес из предполагаемого RedirectResponse
:
$redirect = redirect()->intended(URL::route('dashboard'))
if ($request->ajax()) {
return response()->json([
'auth' => $auth,
'intended' => $redirect->getTargetUrl(),
'errors' => $errors
]);
}
return $redirect;