久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      ThinkPHP5-使用 think-API 部署 JWT

      因?yàn)橄乱粋€(gè)項(xiàng)目要用 TP5 開(kāi)發(fā)一個(gè)小程序,所以就使用到了,TP 框架,因?yàn)樾〕绦蜷_(kāi)發(fā)需要后臺(tái)來(lái)編寫(xiě) api 接口,所以就上網(wǎng)查了一下有沒(méi)有相關(guān)的依賴,在此推薦一下 think-api 擴(kuò)展工具,因?yàn)橹饕胧褂闷渲械?jwt 功能來(lái)判斷小程序用戶的登錄狀態(tài),下面就以本人的項(xiàng)目為例,簡(jiǎn)單和大家聊一下,通過(guò) think-api 來(lái)部署 JWT。

      1. 安裝依賴

      本人使用的 TP 版本是 TP5.1,擴(kuò)展下載地址:https://github.com/czewail/think-api ,通過(guò) composer 安裝依賴:

      $ composer require zewail/think-api:1.1.x

      2. 配置說(shuō)明

      擴(kuò)展安裝完畢后,咱們可以在 vendor/think-api/config/jwt.php 文件中查看 jwt 的配置。

      主要是用戶模型路徑那塊,需要修改一下:

      return [     // 加密算法     'algorithm'      => 'HS256',     // HMAC算法使用的加密字符串     'key'            => 'ex-key',     // RSA算法使用的私鑰文件路徑     'privateKeyPath' => '/home/rsa_private_key.pem',     // RSA算法使用的公鑰文件路徑     'publicKeyPath'  => '/home/rsa_public_key.pem',     // 誤差時(shí)間,單位秒     'deviation'      => 60,     // 過(guò)期時(shí)間, 單位分鐘     'ttl'            => 120,     // 用戶模型路徑     'user'           => appapimodelUser::class, ];

      3. 創(chuàng)建 API 接口控制器

      通過(guò)命令行創(chuàng)建我們想要反回 Token 給前端的控制器

      $ php thnk make:controller api/Index

      4. 引用依賴

      在創(chuàng)建的文件頭添加文件路徑:use ZewailApiFacadesJWT; 案例代碼如下:

      public function index()     {         //獲取前臺(tái)發(fā)送過(guò)來(lái)的登錄信息         $tel      = $this->request->tel;         $password = $this->request->passwword;         //把登錄信息傳入JWT驗(yàn)證匹配         $credentials = ['tel' => $tel, 'password' => $password];         //1.驗(yàn)證通過(guò)返回token  1和2任意取一種方式         $token = JWT::attempt($credentials);         //2.通過(guò)已有賬戶模型生成token  1和2任意取一種方式         $user  = User::find(84);         $token = JWT::fromUser($user);         $msg   = "驗(yàn)證成功";         //把token發(fā)送給前臺(tái)確認(rèn)是否成功登陸         return $this->ApiSuccess($token, $msg);     }

      有一點(diǎn)需要注意因?yàn)?API 離默認(rèn)的接收參數(shù)是 mobile 和 password 。上門的例子中是 tel 和 password 。更改了變量名稱,所以我們需要在用戶模型中接入一下代碼來(lái)說(shuō)明。以此類推。

      public $jwtSub = 'tel';

      5. 配置路由

      在 route/route.php 中加入路由地址 Route::get('api/test', 'api/Index/index');

      6. 運(yùn)行測(cè)試

      在 postman 中測(cè)試結(jié)果如下,這樣咱們就可以在后臺(tái)生成 token 返給前臺(tái)驗(yàn)證登錄了。

      ThinkPHP5-使用 think-API 部署 JWT

      7. 驗(yàn)證 token (補(bǔ)充)

      我們?cè)?postman 中把之前生成的 token 已頭部的方式重新發(fā)送到后臺(tái),來(lái)進(jìn)行 token 驗(yàn)證,以下圖為例。

      ThinkPHP5-使用 think-API 部署 JWT

      之后攜帶頭部訪問(wèn)驗(yàn)證路由,驗(yàn)證代碼如下:

             if ($user = JWT::authenticate()) {                 return true;         }

      如果驗(yàn)證無(wú)誤就會(huì)返回 true。

      8. 關(guān)于 token 不存在及 token 過(guò)期的問(wèn)題處理(補(bǔ)充)

      在 vendorthink-apisrcJWT/Factoriescode.php 文件中 think-api 接口為咱們提供了對(duì)應(yīng)的錯(cuò)誤反饋。

      // 檢查是否過(guò)期 if (isset($payload->exp) && (time() - $this->deviation) >= $payload->exp) {     throw new TokenExpiredException('該 Token 已過(guò)期'); } // 驗(yàn)證簽名 if (!$this->verify("$header64.$payload64", $signature)) {     throw new TokenInvalidException('無(wú)效的 Token'); }

      那么咱們?nèi)绾卫眠@些狀態(tài)反饋呢,這就要使用前置中間件的方式來(lái)對(duì)前端發(fā)送的 token 信息進(jìn)行驗(yàn)證。

      首先創(chuàng)建中間件:

      $ php think make:middle Test

      然后在中間件中寫(xiě)入以下內(nèi)容:

        //用try catch捕獲報(bào)錯(cuò)反饋     public function handle($request, Closure $next)     {         try {             if (!$user = JWT::authenticate()) {                 return response()->json([                     'errcode' => 1004,                     'errmsg'  => '無(wú)此用戶',                 ], 404);             }             return $next($request);         } catch (TokenExpiredException $e) {             return response()->json([                 'errcode' => 1003,                 'errmsg'  => 'token 過(guò)期', //token已過(guò)期             ]);         } catch (TokenInvalidException $e) {             return response()->json([                 'errcode' => 1002,                 'errmsg'  => 'token 無(wú)效', //token無(wú)效             ]);         } catch (JWTException $e) {             return response()->json([                 'errcode' => 1001,                 'errmsg'  => '缺少token', //token為空             ]);         }     }

      之后再在路由上門引用就可以了。

      推薦教程:thinkphp教程

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)