登录、登出后重定向到来源页面

目标:
A页(未登录)->登录页->登录->A页(已登录)
B页(已登录)->登出->B页(未登录)

代码:
app/Http/Controllers/Auth/LoginController.php

...
use URL;

class LoginController extends Controller
{
    use AuthenticatesUsers {
        showLoginForm as laravelShowLoginForm;
        logout as laravelLogout;
    }

    protected $redirectToSessionKey = 'redirect_to';

    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    public function showLoginForm(Request $request)
    {
        $request->session()->put($this->redirectToSessionKey, URL::previous());

        return $this->laravelShowLoginForm();
    }

    public function redirectTo()
    {
        $request = app(Request::class);
        $redirectTo = $request->session()->get($this->redirectToSessionKey);
        $request->session()->forget($this->redirectToSessionKey);

        return $redirectTo;
    }

    public function logout(Request $request)
    {
        $this->laravelLogout($request);

        return redirect(URL::previous());
    }
}
本帖已被设为精华帖!
本帖由系统于 4年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 5

关键词URL::previous()

5年前 评论

再加一句代码改进一下。
A页(未登录)->登录页->登录->登陆失败(账密错误)->登录->登陆失败->...->登陆成功->A页(已登录)
原:

public function showLoginForm(Request $request)
{
    $request->session()->put($this->redirectToSessionKey, URL::previous());

    return $this->laravelShowLoginForm();
}

新:

public function showLoginForm(Request $request)
{
    if (!$request->session()->has($this->redirectToSessionKey)) {
        $request->session()->put($this->redirectToSessionKey, URL::previous());
    }

    return $this->laravelShowLoginForm();
}
5年前 评论

更规范的 key 应该可以用这个。

file
退出尽量不要回跳,因为如果从用户中心注销,再回跳,又会跳到登录页。一般正常跳到首页就行了。

5年前 评论

@DavidNineRoc 主题配色好舒服,什么主题和配色啊 :smile:

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!