柔晶美网络工作室

柔晶美网络工作室,倾心于web技术的博客站点

关注我 微信公众号

您现在的位置是: 首页 > 博客日记

larael 8.x实现登录后跳转回登录前浏览的页面

2021-03-03 admin laravel  1470

laravel如果在登录前有中间的拦截,跳转到了登录界面,默认是会跳转回登录前浏览的页面的,其实现过程是:

访问需要认证的页面 -> 被 Auth 中间件拦截后抛出异常 -> 处理异常:在 Session 中存入要访问的页面地址,然后跳转至登录页面 -> 登录成功后从 Session 中取出先前存入的页面地址,并跳转至该地址

//vendor/laravel/framework/src/Illuminate/Routing/Redirector.php
 
public function intended($default = '/', $status = 302, $headers = [], $secure = null)
{
    $path = $this->session->pull('url.intended', $default);
    return $this->to($path, $status, $headers, $secure);
}

不过,如果是没有中间件拦截,我们手动点击登录,那怎样才能在登录后跳转回登录前页面呢?方法很简单,只需在 Auth\LoginController.php 控制器中重写其继承的 AuthenticatesUsers 这个 Trait 中的 showLoginForm() 方法即可:

// app/Http/Controllers/Auth/LoginController.php
use AuthenticatesUsers;
 
// 打开登录页面
public function showLoginForm()
{
    session(['url.intended'=>url()->previous()]);
    return view('auth.login');
}

只需在原有的 showLoginForm() 方法中添加一行即可!这个操作的关键就是打开登录页面时,将上一个浏览的页面地址存入 Session 的 url.intended 键。

由于登录步骤和第一种情况一样,所以 Laravel 会在登录成功后检查 Session url.intended 键的值,如果有值就会跳转到该页面。

如果有微信等第三方登录,也可参照此方法添加session来保持跳转回登录前浏览页面。

文章评论


需要 登录 才能发表评论
热门评论
0条评论

暂时没有评论!