日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Laravel - Auth验证流程以及guard守卫和自定义驱动driver驱动,使用web-token验证

發(fā)布時間:2025/3/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Laravel - Auth验证流程以及guard守卫和自定义驱动driver驱动,使用web-token验证 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

不同認證方式

我們先來看 config/auth.php

  • provider

    • providers 數(shù)組讓我們可以配置一個提供者,每個提供者可以選擇不同的 driver.driver可以選擇eloquent 或者 database ,
    • 對應(yīng)的驅(qū)動之后選擇對應(yīng)的配置項,eloquent:model,database:table
  • guard

    • 在擁有provider之后我們可以配置guards 守衛(wèi),守衛(wèi)可以配置一個驅(qū)動者和一個提供者
    • 提供者就是我們上面配置的provider
    • 而驅(qū)動者則有session(session認正),token(token認正)可供選擇
    • 默認api使用的是token認正,而web用戶使用session認正

session認正

  • 在認證時我們可以使用Auth::attempt(['email' => $email, 'password' => $password])方法,此方法在驗證成功后會自動為這個用戶設(shè)置一個認證 Session,標(biāo)識該用戶登錄成功
  • 后面就可以使用Auth::guard()->check()方式驗證用戶是否已經(jīng)登錄

token認正

  • 此認正方式laravel雖然提供了驅(qū)動方法,但是并沒有默認它為驗證方式,也沒有提供自動生成token的方法,要使用此方法要自定義login方法
  • 通過查看底層的\vendor\laravel\framework\src\Illuminate\Auth\TokenGuard.php方法,我們可以發(fā)現(xiàn)laravel5.5底層默認的是token字段,我們也可以在此自定義此字段,在此我使用了web_token作為認正字段

  • 然后我們還要在數(shù)據(jù)庫里建立相應(yīng)的字段web_token

注:如果使用redis等nosql保存web_token的話也是需要web_token的,為了使laravel自帶的Auth門面可以使用
  • 建立完字段以后就可以寫登錄方法了:

  • 在這里還是使用了redis去保存token,便于設(shè)置token的過期時間

    • 至于為什么還要保存在數(shù)據(jù)庫里,在注銷或者token過期的時候還要更新數(shù)據(jù)庫的token,是因為Auth底層獲取user的方法是從數(shù)據(jù)庫進行獲取的
    • 貼上源碼來看一波
  • 首先還是\vendor\laravel\framework\src\Illuminate\Auth\TokenGuard.php文件

    • 這里插一下,如果是想把token放在header頭里傳值,還要在TokenGuard.php加入這一段

  • 如果不加入這一段只能從body里面獲取token,頭里傳的token獲取不到,如果是我理解有誤,希望指出
  • 回到原來,我們要說Auth::user()方法, 這個方法會先實例化一個guard守衛(wèi)指定的驅(qū)動,不指定的話就是默認的
  • 可以參考這段代碼\vendor\laravel\framework\src\Illuminate\Auth\AuthManager.php

  • 指定的話,就會去實例化指定的guard,比如Auth::guard('user')->user()
  • 我們這里默認的就是守衛(wèi)adminToken的驅(qū)動就是token


  • 當(dāng)我們調(diào)用Auth::user( ) 時會調(diào)用\vendor\laravel\framework\src\Illuminate\Auth\TokenGuard.php里的

  • 然后我們找到retrieveByCredentials()這個方法在vendor\laravel\framework\src\Illuminate\Auth\EloquentUserProvider.php

  • 可以看出這個方法用token為條件在elquentModel里查出了一條userObject并返回給了我們
  • 所以我們Auth::user() 得到的user對象是在model里用token查出來的,所以如果想使用此功能的話,數(shù)據(jù)庫里的token字段一定要保持更新
  • 當(dāng)然你也可以拋棄不用,或者改變源碼讓他從redis中取到token和對應(yīng)的id,再用id去model中取數(shù)據(jù)
  • 這里理解了之后我們在寫一個middleware用來驗證在訪問網(wǎng)站時token是否正確就行了

  • 把新建的middleware加入kernel.php中

  • 最后在要被驗證的方法里的構(gòu)造方法里調(diào)用這個middleware就可以開啟我們得token驗證了
  • 如果你有某個方法不想使用驗證, 可以使用except()方法把其排除了

總結(jié)

以上是生活随笔為你收集整理的Laravel - Auth验证流程以及guard守卫和自定义驱动driver驱动,使用web-token验证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。