页面上发生了多个 ajax 请求,如果用户登录,用户将通过以下代码段重定向到最新的 url:
public function showLoginForm()
{
if(!session()->has('url.intended')) {
session(['url.intended' => url()->previous()]);
}
return view('auth.login');
}
这个 url 可能是一个返回一些 json 的 ajax。如何避免预期的 url 成为 ajax?我显然希望它重定向到实际的上一页而不是一些随机的 ajax 调用。避免这种情况的唯一方法是将重定向 URL 保存为查询参数,如 /login?redirect_uri=/go-here-after-login
吗?
此外,如果您有完全不同的方法,我会洗耳恭听。
谢谢!
最佳答案
您应该考虑使用 redirect()->intended()
来达到您的目的。
当未经身份验证的用户尝试访问受 Auth 中间件保护的页面时,他们将被重定向到您的登录页面,然后他们的预期 URL(他们尝试访问的 URL)才会存储在 session 中。
当该用户登录时,您可以将他们重定向到他们想要的页面,或者您使用 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 或其他方式)不应存储在 session 中,只有当 Auth 中间件启动时才会设置预期的 URL .
在您的代码中,您使用的是 url()->previous()
,它将用户重定向到他们的推荐人(发起请求的页面,即上一个页),而不是存储在 session 中的预期 URL。
关于php - 如何避免 Laravel 登录重定向到最新的 AJAX 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50748035/