亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

laravel已經內置了一套授權和權限分配的功能,我們不用從零開始設計,這方便了很多。但是, 因為集成在框架內的緣故,很多時候對于用戶體系甚至有些陌生。本文通過一個簡單的需求,判斷有效用戶, 逐一為大家實現。

3分鐘短文 | Laravel 用戶授權原來內置了這么多方法

 

學習時間

比如在前端有一個界面,表單的提交參數如下:

<form class="form-horizontal" role="form" method="POST" action="{{ url('/auth/login') }}">

其中路由 /auth/login 是框架內集成的方法。如果有效的數據則進行驗證登陸,如果無效則執行錯誤邏輯。 那么問題來了,能否手動實現這些邏輯呢。或者說,為了防止無效的暴力請求,在表單開始之初, 能否直接過濾掉一些垃圾請求,過濾掉根本不存在的用戶,或者被禁止的用戶呢?

我們需要在 LoginController 內重寫 login 方法。該方法接收一個請求體:

public function login(IlluminateHttpRequest $request) {}

驗證請求參數是否有效:

$this->validateLogin($request);

如果用戶請求頻次超限被鎖定,則直接返回:

if ($this->hasTooManyLoginAttempts($request)) {
    $this->fireLockoutEvent($request);
    return $this->sendLockoutResponse($request);
}

請求參數正常,接著驗證用戶的賬號密碼是否正確:

$ok = $this->guard()->validate($this->credentials($request));

如果賬號密碼錯誤,則增加請求計數頻次:

$this->incrementLoginAttempts($request);

拋出一個登陸錯誤的提示頁面:

return $this->sendFailedLoginResponse($request);

如果用戶賬號密碼正確,也就是登陸成功了。首先獲取用戶模型:

$user = $this->guard()->getLastAttempted();

接著就是我們需求中所說的業務邏輯,可以過濾用戶是否active。使用判斷:

$is_active = $user->active && $this->attemptLogin($request);

如果邏輯通過,則將頁面導航到成功后頁面:

return $this->sendLoginResponse($request);

如果不通過,大概率這用戶是無效非法的,累加其登陸頻次計數:

$this->incrementLoginAttempts($request);

并給出錯誤提示,比較自由,可附加提示信息:

return redirect()->back()->withInput($request->only($this->username(), 'remember'))->withErrors(['active' => 'You must be active to login.']);

至此,登陸篩選的邏輯就完成了。

簡化版

如果像上一節那樣大改login方法你覺得有些困難,那我們可以來一個簡化版, 在登陸驗證階段,直接驗證用戶,并給出錯誤提示。

我們知道控制器繼承了 Validator,可以直接使用 validate 方法手動構建驗證規則:

考慮以下代碼:

protected function validateLogin(Request $request)
{
    $this->validate($request, [
        $this->username() => 'exists:users,' . $this->username() . ',active,1',
        'password' => 'required|string',
    ]);
}

我們在控制器內調用該方法進行過濾驗證即可。

寫在最后

本文通過一步步實現用戶登錄驗證流程的方式,將自定義的邏輯嵌入到登錄處理流程內, 這是一種魔改。當然在請求階段,在應用邏輯處理到響應體之前,你都有機會干預此次請求。 laravel畢竟太靈活了。

HAppy coding :-)

我是@程序員小助手,持續分享編程知識,歡迎關注。

分享到:
標簽:Laravel
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定