📜  登录 laravel 后重定向到尝试的 url - PHP (1)

📅  最后修改于: 2023-12-03 15:11:21.623000             🧑  作者: Mango

登录 Laravel 后重定向到尝试的 URL - PHP

有些时候在 Laravel 应用程序中,我们需要先让用户登录后才能让其访问特定的 URL。在这种情况下,就需要在登录成功后将用户重定向回之前尝试访问的 URL。在本篇文章中,我们将介绍如何实现这个功能。

方法一:使用 Laravel 的 Intended 方法

Laravel 提供了名为 Intended 的辅助方法,该方法可用于在登录后将用户重定向回其之前尝试访问的 URL。这个方法接受一个 URL 参数,并将其存储在会话中。登录成功后,Laravel 将会检查会话中是否存在这个 URL 并重定向到它。

以下是如何使用 Intended 方法的示例代码:

public function login(Request $request) {
    // 省略验证逻辑

    // 将当前 URL 存储在会话中
    session(['url.intended' => url()->previous()]);

    // 重定向到登录后的页面
    return redirect()->route('dashboard');
}

上面的代码将当前 URL 存储在会话中,然后将用户重定向到 dashboard 页面。当用户成功登录后,Laravel 将自动检查会话中是否存在存储的 URL。如果存在,则自动重定向到该 URL。

方法二:手动重定向

除了使用 Intended 方法外,我们还可以手动将用户重定向回之前尝试访问的 URL。在 Laravel 中,可以使用 redirect() 函数结合 back() 方法来实现。

以下是示例代码:

public function login(Request $request) {
    // 省略验证逻辑

    // 重定向到登录后的页面
    return redirect()->route('dashboard')
        ->with('url', url()->previous());
}

public function dashboard(Request $request) {
    // 省略逻辑

    // 检查 URL
    if ($request->session()->has('url')) {
        return redirect()->to($request->session()->get('url'));
    }

    // 省略其他逻辑
}

上面的代码首先将用户重定向回 dashboard 页面,并将之前的 URL 存储在了闪存数据中。在 dashboard 控制器方法中,我们检查是否存在存储的 URL。如果存在,则手动将用户重定向到该 URL。

结论

本篇文章介绍了两种方法来实现在登录 Laravel 后重定向到尝试的 URL。虽然使用 Intended 方法更加简单,但是手动重定向也是一个不错的选择,特别是当你需要对重定向逻辑进行定制时。