📅  最后修改于: 2023-12-03 15:11:21.623000             🧑  作者: Mango
有些时候在 Laravel 应用程序中,我们需要先让用户登录后才能让其访问特定的 URL。在这种情况下,就需要在登录成功后将用户重定向回之前尝试访问的 URL。在本篇文章中,我们将介绍如何实现这个功能。
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
方法更加简单,但是手动重定向也是一个不错的选择,特别是当你需要对重定向逻辑进行定制时。