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

标签 php ajax laravel redirect authentication

页面上发生了多个 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/

相关文章:

php - 需要二维码帮助才能获得入场二维码门票

php - 如何将门禁读卡器与PHP链接?

php - 如何允许用户登录网站并将其用户名信息保存在 PHP/HTML 中?

javascript - 通过ajax发送base64图像数据到cfc

php - Laravel 什么时候清除缓存?

mysql - 使用日期过滤器的 Laravel Eloquent 查询中的错误结果

php - Woocommerce 3.3+ 中的后端订单列表自定义操作按钮

javascript - 使用 JSON 提供测验答案的简洁方法

javascript - 如何从异步调用返回响应?

php - 不应静态调用 Model::update()