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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

记一次laravel-jwt修改黑名单所用redis数据库

發(fā)布時(shí)間:2024/9/21 数据库 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记一次laravel-jwt修改黑名单所用redis数据库 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

場(chǎng)景是這樣的,我用tymon/jwt包做鑒權(quán)。jwt是自編碼token,過(guò)期前想要強(qiáng)制失效只能將其加入黑名單中,黑名單一般用緩存存儲(chǔ)。

但會(huì)有一個(gè)問(wèn)題,若某種意外情況不小心執(zhí)行了php aritsan cache:clear,那么當(dāng)前使用的緩存數(shù)據(jù)庫(kù)(配置文件中設(shè)置,默認(rèn)config/database.php->redis->default)會(huì)被清空,而tymon/jwt包也是用default數(shù)據(jù)庫(kù)的,故黑名單的token也會(huì)被一并清空。

如何在不改第三方包的前提下修改黑名單使用的redis數(shù)據(jù)庫(kù)?這樣token就能獨(dú)占一庫(kù),不用和其他緩存數(shù)據(jù)一起混在當(dāng)前使用數(shù)據(jù)庫(kù)中,即使php aritsan cache:clear也不會(huì)受影響

查看源碼:

Tymon\JWTAuth\Blacklist.php

?點(diǎn)進(jìn)繼續(xù)追蹤,發(fā)現(xiàn)Storage的實(shí)現(xiàn)是Tymon\JWTAuth\Providers\Storage\Illuminate.php的Illuminate類。

Illuminate在構(gòu)造函數(shù)中注入了一個(gè)CacheContract,即Illuminate\Contracts\Cache\Repository,這其實(shí)就是laravel的Cache緩存類,最后注入的緩存對(duì)象使用的就是config/cache/redis中指定的數(shù)據(jù)庫(kù)(已經(jīng)從第三方包追到框架源碼了,所以我就不繼續(xù)追了),我的場(chǎng)景下就是default

如果我們想讓這個(gè)包不注入默認(rèn)的Cache對(duì)象,而使用我們指定的Cache對(duì)象,我們可以用laravel的服務(wù)提供者:https://laravel-china.org/docs/laravel/5.6/providers/1360與服務(wù)容器進(jìn)行上下文綁定:https://laravel-china.org/docs/laravel/5.6/container/1359#contextual-binding

在App\Providers\AppServiceProvider->register()方法中

對(duì)Tymon\JWTAuth\Providers\Storage\Illuminate注入的Illuminate\Contracts\Cache\Repository進(jìn)行注冊(cè)(注冊(cè)為我們想要的對(duì)象):

/** * Register any application services. * * @return void */ public function register() {$this->app->when(Illuminate::class) //use Tymon\JWTAuth\Providers\Storage\Illuminate->needs(Repository::class) //use Illuminate\Contracts\Cache\Repository->give(function () {return app('cache')->store('jwt');}); }

即當(dāng)Illuminate需要注入Repository時(shí),注入function()閉包內(nèi)返回的對(duì)象,在閉包里用store()方法指定緩存使用的緩存存儲(chǔ),也就是我們自定義的jwt存儲(chǔ)(config/cache.php):

驅(qū)動(dòng)使用redis,連接的數(shù)據(jù)庫(kù)就是config/database.php->redis中我們自定義的jwt數(shù)據(jù)庫(kù)

這樣,第三方包注入依賴對(duì)象的時(shí)候,就會(huì)使用服務(wù)提供者提供的對(duì)象進(jìn)行注入(我的場(chǎng)景里注入的就是專門(mén)jwt數(shù)據(jù)庫(kù)的Cache對(duì)象),這就是laravel服務(wù)容器和服務(wù)提供者強(qiáng)大的地方。

轉(zhuǎn)載于:https://www.cnblogs.com/SHQHDMR/p/10229001.html

總結(jié)

以上是生活随笔為你收集整理的记一次laravel-jwt修改黑名单所用redis数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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