Laravel5.4從新登錄跳轉到登錄前頁面的原理和實現

1.應用場景:
用戶登錄後一段時間須要從新登陸,且登錄後返回以前瀏覽的頁面,而不是系統首頁。例如:當用戶在/article/2 頁面,登錄過時後跳轉到登錄頁面,登錄後用戶還應在/user/2而不是home/index。前端

2.實現原理
經過判斷cookie過時時間決定用戶是否須要從新登錄,需從新登錄前,存儲用戶當前的url地址到session中,下次登錄後跳轉到此url地址。laravel

3.laravel中的具體實現ajax

  • 路由中間件(判斷登錄狀態)
    這裏以cookie是否過時判斷用戶登錄狀態,中間件只判斷登錄相關判斷和執行,不作多餘操做(登陸時我使用cookie的值$token做爲session的鍵存儲),代碼以下:
public function handle($request, Closure $next) {
    //判斷cookie是否存在
    if ($token = Cookie::get('token')) {
        //判斷session信息,保持狀態一致
        if ($request->session()->get($token)) {
            return $next($request);
        }
    }

    //獲取當前url,跳轉到登錄頁
    //這裏也能夠不用session,直接寫到url地址裏,須要url_encode()
    return redirect('/admin')->with('reurl', $request->getRequestUri());
  • 頁面端(判斷閃存信息)
    判斷閃存的信息,這裏分ajax和submit登錄,submit應該不多了,ajax下獲取reurl,而後後端登錄判斷reurl。
@if (session('reurl'))
                <input type="hidden" name="reurl" value="{{ session('reurl') }}"/>
   @endif
  • 登錄(登錄邏輯)
    省略了判斷用戶帳戶密碼,和存儲cookie,session的邏輯,最後前端獲取url,location.href = 'url',跳轉到原url地址。
$reurl = $request->get('reurl');

$url = empty($reurl) ? '/home/index' : $reurl;

return response($url);

注:本文只貼出了實現從新登陸的相關代碼,實際代碼請按照實際業務作對應修改。後端

相關文章
相關標籤/搜索