成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

laravel auth 認證

Lionad-Morotar / 2332人閱讀

摘要:如果兩個經(jīng)哈希運算的密碼相匹配那么將會為這個用戶開啟一個認證。如果認證成功的話方法將會返回。重定向器上的方法將用戶重定向到登錄之前用戶想要訪問的,在目標無效的情況下回退將會傳遞給該方法。最后如有錯誤,歡迎指出交流群

Auth認證 路由

從路由開始,找到源碼,再進行研究
找到根目錄下面的

vendor/laravel/framework/src/Illuminate/Routing/Router.php

在282-303之間,具體代碼如下:

    /**
     * Register the typical authentication routes for an application.
     *
     * @return void
     */
    public function auth()
    {
        // Authentication Routes...
        $this->get("login", "AuthLoginController@showLoginForm")->name("login");
        $this->post("login", "AuthLoginController@login");
        $this->post("logout", "AuthLoginController@logout");

        // Registration Routes...
        $this->get("register", "AuthRegisterController@showRegistrationForm");
        $this->post("register", "AuthRegisterController@register");

        // Password Reset Routes...
        $this->get("password/reset", "AuthForgotPasswordController@showLinkRequestForm");
        $this->post("password/email", "AuthForgotPasswordController@sendResetLinkEmail");
        $this->get("password/reset/{token}", "AuthResetPasswordController@showResetForm");
        $this->post("password/reset", "AuthResetPasswordController@reset");
    }

其中一共有9種路由,登錄三種,注冊兩種,重置密碼有四種

登錄部分(login)

登錄有3種,一種get方式的,兩種post方式的,顯然get方式的用來獲取登錄頁面,這個沒啥好說啦,其中一種POST方式的是用來登出的,也就是logout,一種是登入,也就是login。

login($this->post("login", "AuthLoginController@login");)

找到

vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

(如果不知道怎么找源碼的話,直接在編輯器中全局搜索showLoginForm)

在23-56行,就是我們的login方法

/**
     * Handle a login request to the application.
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function login(Request $request)
    {
        $this->validateLogin($request);

        // If the class is using the ThrottlesLogins trait, we can automatically throttle
        // the login attempts for this application. We"ll key this by the username and
        // the IP address of the client making these requests into this application.
        if ($lockedOut = $this->hasTooManyLoginAttempts($request)) {
            $this->fireLockoutEvent($request);

            return $this->sendLockoutResponse($request);
        }

        $credentials = $this->credentials($request);

        if ($this->guard()->attempt($credentials, $request->has("remember"))) {
            return $this->sendLoginResponse($request);
        }

        // If the login attempt was unsuccessful we will increment the number of attempts
        // to login and redirect the user back to the login form. Of course, when this
        // user surpasses their maximum number of attempts they will get locked out.
        if (! $lockedOut) {
            $this->incrementLoginAttempts($request);
        }

        return $this->sendFailedLoginResponse($request);
    }

也就是說,我們在頁面上面點擊登錄按鈕,就會將請求提交到該方法。
下面我們來看看login方法的具體實現(xiàn)
首先

$this->validateLogin($request);

具體如58~69行:

/**
 * Validate the user login request.
 *
 * @param  IlluminateHttpRequest  $request
 * @return void
 */
protected function validateLogin(Request $request)
{
    $this->validate($request, [
        $this->username() => "required", "password" => "required",
    ]);
}

這里只是校驗了用戶名以及密碼是否為非空

回到login方法,校驗完后

if ($lockedOut = $this->hasTooManyLoginAttempts($request)) {
    $this->fireLockoutEvent($request);

    return $this->sendLockoutResponse($request);
}

這里面主要是對用戶登錄失敗次數(shù)的限制,如果登錄失敗次數(shù)過多就限制用戶登錄

接著,最重要的部分到啦
$credentials = $this->credentials($request);

具體方法在71~80行,如下:

/**
 * Get the needed authorization credentials from the request.
 *
 * @param  IlluminateHttpRequest  $request
 * @return array
 */
protected function credentials(Request $request)
{
    return $request->only($this->username(), "password");
}

這里返回了request請求里面的‘$this->username()’也就是email字段以及password字段的數(shù)據(jù)
然后根據(jù)上面得到的數(shù)據(jù),調用guard()進行用戶認證

if ($this->guard()->attempt($credentials, $request->has("remember"))) {
    return $this->sendLoginResponse($request);
}

由guard()具體代碼可以看到(152-160行):

/**
 * Get the guard to be used during authentication.
 *
 * @return IlluminateContractsAuthStatefulGuard
 */
protected function guard()
{
    return Auth::guard();
}

顯然用戶的具體賬號密碼的認證用到了laravel的門面(Facades)來實現(xiàn)最后的用戶認證

attempt($credentials, $request->has("remember"))

最后,

if (! $lockedOut) {
    $this->incrementLoginAttempts($request);
}
return $this->sendFailedLoginResponse($request);

如果認證不通過,這里將增加一次失敗的次數(shù)并返回相對應的信息

經(jīng)過上面的分析,如果我們不想使用laravel自帶的認證的話,我們可以直接使用 Laravel 認證類來管理用戶認證,例如

 $email, "password" => $password])) {
            // Authentication passed...
            return redirect()->intended("dashboard");
        }
    }
}

attempt 方法接收鍵值數(shù)組對作為第一個參數(shù),數(shù)組中的值被用于從數(shù)據(jù)表中查找用戶,因此,在上面的例子中,用戶將會通過email 的值獲取,如果用戶被找到,經(jīng)哈希運算后存儲在數(shù)據(jù)中的密碼將會和傳遞過來的經(jīng)哈希運算處理的密碼值進行比較。如果兩個經(jīng)哈希運算的密碼相匹配那么將會為這個用戶開啟一個認證Session。

如果認證成功的話 attempt 方法將會返回 true。否則,返回 false。
重定向器上的 intended 方法將用戶重定向到登錄之前用戶想要訪問的 URL,在目標 URL 無效的情況下回退 URI 將會傳遞給該方法。

如果需要的話,除了用戶郵件和密碼之外還可以在認證查詢時添加額外的條件,例如,我們可以驗證被標記為有效的用戶:

if (Auth::attempt(["email" => $email, "password" => $password, "active" => 1])) {
    // The user is active, not suspended, and exists.
}

注:在這些例子中,并不僅僅限于使用 email 進行登錄認證,這里只是作為演示示例,你可以將其修改為數(shù)據(jù)庫中任何其他可用作“username”的字段。

最后

如有錯誤,歡迎指出


QQ交流群:489832466

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/22953.html

相關文章

  • Laravel核心解讀 -- 用戶認證系統(tǒng)(基礎介紹)

    摘要:系統(tǒng)的核心是由的認證組件的看守器和提供器組成。使用的認證系統(tǒng),幾乎所有東西都已經(jīng)為你配置好了。其配置文件位于,其中包含了用于調整認證服務行為的注釋清晰的選項配置。 用戶認證系統(tǒng)(基礎介紹) 使用過Laravel的開發(fā)者都知道,Laravel自帶了一個認證系統(tǒng)來提供基本的用戶注冊、登錄、認證、找回密碼,如果Auth系統(tǒng)里提供的基礎功能不滿足需求還可以很方便的在這些基礎功能上進行擴展。這篇...

    RebeccaZhong 評論0 收藏0
  • Laravel 多用戶認證系統(tǒng)改造方案

    摘要:本文基于,主要介紹如何針對多站點分別進行用戶認證的改造,用意是最大限度利用自帶的認證系統(tǒng)。具體方案為清晰起見,項目按照不同站點組織成不同模塊。學院版用戶認證文檔版用戶認證文檔更詳細學院版驗證文檔版驗證文檔更詳細翁航版多用戶認證方案 原文發(fā)表于 http://www.jianshu.com/p/d6c112f27661 showImg(https://segmentfault.com/i...

    paulli3 評論0 收藏0
  • Laravel核心解讀 -- 擴展用戶認證系統(tǒng)

    摘要:擴展用戶認證系統(tǒng)上一節(jié)我們介紹了系統(tǒng)實現(xiàn)的一些細節(jié)知道了是如何應用看守器和用戶提供器來進行用戶認證的,但是針對我們自己開發(fā)的項目或多或少地我們都會需要在自帶的看守器和用戶提供器基礎之上做一些定制化來適應項目,本節(jié)我會列舉一個在做項目時遇到的 擴展用戶認證系統(tǒng) 上一節(jié)我們介紹了Laravel Auth系統(tǒng)實現(xiàn)的一些細節(jié)知道了Laravel是如何應用看守器和用戶提供器來進行用戶認證的,但是...

    王偉廷 評論0 收藏0
  • Laravel 5.5 使用 Jwt-Auth 實現(xiàn) API 用戶認證以及無痛刷新訪問令牌

    摘要:默認的時間為周。大概意思就是如果用戶有一個,那么他可以帶著他的過來領取新的,直到周的時間后,他便無法繼續(xù)刷新了,需要重新登錄。指定在刷新令牌時要保留的聲明密鑰。為了使令牌無效,您必須啟用黑名單。指定用于對用戶進行身份驗證的提供程序。 showImg(https://segmentfault.com/img/remote/1460000012606251?w=1920&h=1280); ...

    xavier 評論0 收藏0
  • Laravel核心解讀--用戶認證系統(tǒng)的實現(xiàn)細節(jié)

    摘要:通過裝載看守器和用戶提供器裝載看守器和用戶提供器用到的方法比較多,用文字描述不太清楚,我們通過注解這個過程中用到的方法來看具體的實現(xiàn)細節(jié)。 用戶認證系統(tǒng)的實現(xiàn)細節(jié) 上一節(jié)我們介紹來Laravel Auth系統(tǒng)的基礎知識,說了他的核心組件都有哪些構成,這一節(jié)我們會專注Laravel Auth系統(tǒng)的實現(xiàn)細節(jié),主要關注Auth也就是AuthManager是如何裝載認證用的看守器(Guard)...

    NicolasHe 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<