jwttoken 報錯User not found,指定token的驗簽的表,制定token驗證的表,根據不同的表生成token


token使用場景

項目分為兩端pc和h5,對應的用戶表分別為users和members其中users為后台管理員用戶表,memers為項目用戶表,在用戶通過h5登陸的時候使用member模型並且用戶只采用手機號快捷登陸,也就是說member表中的用戶沒有密碼,后台管理員登陸的時候使用的是user模型,我們采取路由中間件的方式進行token的驗簽

為了實現該效果分為以下幾步

一、token的生成

查看https://www.cnblogs.com/mzli/p/10637214.html可了解使用jwttoken的配置,pc端生成token我們使用auth('users')->attempt($data),$data=[用戶名,密碼]

attempt方法的解釋:Attempt to authenticate a user using the given credentials(嘗試使用給定憑據對用戶進行身份驗證)

同樣的pc端使用auth('users')->user($token)來解析token中包含的用戶信息

h5 登錄時我們僅通過用戶id來生成token使用方法為tokenById($id)同樣的可以通過auth('')->user($token)來獲取信息但是這里應該使用member門面如auth('member')->user($token)

二、token的驗簽通過路由中間件

jwttoken本身已經提供了驗證token的中間件--jwt.auth,但是因為我們是兩張表,所以在我們使用的時候應該指定使用member還是user表來查詢對應token的數據

jwttoken驗證token的中間件如下

 

 

 而在這個中間件中又調用了class BaseMiddleware中的anthenticate方法,anthenticate方法如下

 

 

 $this->auth就在本類中有一個構造函數,如下

 

 

 所以也就是說,我們在使用這jwttoken提供的驗證token的中間件jwt.auth中間件的時候我們就應該直接將對應的auth類聲明

所以在路由中應該如下使用

 

 這樣,我們就可以使用對應的模型進行數據的驗證和獲取了

三、如果使用jwttoken中報錯User not found也有可能是因為沒有指定要使用的模型是哪一個,jwttoken無法獲取到對應的用戶數據,報錯沒有這個用戶

 報錯

 

 如果出現如上圖報錯,首先查看是否使用 Dingo\Api

如果使用了,可以在 app/Providers/AppServiceProvider.php增加如下代碼

app('Dingo\Api\Exception\Handler')->register(function(AuthenticationException $exception) {
if($exception->getMessage() === "Unauthenticated.")
return response()->json(['code' => 403, 'message' => '', 'data' => '令牌錯誤!']);
});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM