如何避免Laravel登录重定向到最新的AJAX调用?



页面上发生了多个ajax请求,如果用户登录,用户将通过以下代码片段重定向到最新的URL:

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

这个网址可能是一个返回一些json的ajax。如何避免预期的网址是 ajax?我显然希望它重定向到实际的上一页,而不是一些随机的 ajax 调用。是否通过将重定向 url 保存为查询参数(如/login?redirect_uri=/go-here-after-login(来避免这种情况的唯一方法?

另外,如果你有一个完全不同的方法,我全听。

谢谢!

您应该考虑使用redirect()->intended()来实现您的目的。

当未经身份验证的用户尝试访问受身份验证中间件保护的页面时,他们将被重定向到您的登录页面,然后他们的预期 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 或其他方式(都不应存储在会话中,只有当身份验证中间件启动时,才会设置预期的 URL。

在您的代码中,您使用的是url()->previous(),它将用户重定向到他们的引荐来源网址(发起请求的页面,即上一页(,而不是存储在会话中的预期 URL。

最新更新