<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                jwt、tp中間件聽起來好高大上的樣子。 花了兩天時間閱讀文檔和看視頻,終于懂了點皮毛,在這里記錄一下。 以下兩個問題需要搞懂 1? jwt 是什么 ? JWT 全稱 Json Web token,是為了在網絡應用環境間傳遞聲明而執行的一種基于json的開放標準(RFC 7519),該token被設計為緊湊且安全的,特別適用于分布式站點的單點登錄(SSO)場景。JWT的聲明一般被用來在身份提供者和服務提供者之間傳遞被認證的用戶身份信息,以便于從服務器獲取資源,也可以增加一些額外的其他業務邏輯所必須的聲明信息,該token也可之間被用于認證,也可以被加密。 簡而言之,我們這里要用到的就是jwt的加密和解密。 先簡單記錄一下 第一步 安裝jwt擴展 建議使用composer安裝 方便 快捷 composer require firebase/php-jwt 運行成功后顯示 圖一 圖二即安裝成功: 圖一: ![](https://img.kancloud.cn/f3/1f/f31f24702f467493278ef3aa8508bc1c_601x307.png) ![](https://img.kancloud.cn/ae/a4/aea48e01ab1e57efa1b8c57a9d4c8471_334x282.png) 第二步 調用 JWT里面的 encode 和 decode方法進行生成token和驗證token 我是在app 目錄下的 common.php 文件使用的 ,做成了公共方法 ?首先 引入 JWT ,然后寫兩個方法,生成驗簽和驗證token。 ~~~php use \Firebase\JWT\JWT; ~~~ ``` <?php /\* ?\* @Descripttion: 梧桐樹科技 ?\* @version: 1.0.1 ?\* @Author: yms ?\* @Date: 2022-05-24 11:02:26 ?\* @LastEditors: ymsxxx ?\* @LastEditTime: 2022-05-25 00:07:58 ?\*/ namespace wt\\pluadd\\velogic; use Firebase\\JWT\\JWT; use Firebase\\JWT\\Key; /\*\* ?\* @description: jwt驗證 ?\* @Date: 2022-05-24 11:03:55 \* @return {\*} ?\* @LastEditTime: Do not Edit ?\*/ class VerufyJwt{ //生成驗簽 public function signToken($uid){ $key \= '!@#$%\*&'; //這里是自定義的一個隨機字串,應該寫在config文件中的,解密時也會用,相當 ? ?于加密中常用的 鹽 ?salt $nowtime \= time(); echo ($nowtime + 100) . ''; /\* ? ? ? ? iss: jwt簽發者 ? ? ? ? sub: jwt所面向的用戶 ? ? ? ? aud: 接收jwt的一方 ? ? ? ? exp: jwt的過期時間,這個過期時間必須要大于簽發時間 ? ? ? ? nbf: 定義在什么時間之前,該jwt都是不可用的. ? ? ? ? iat: jwt的簽發時間 ? ? ? ? jti: jwt的唯一身份標識,主要用來作為一次性token,從而回避重放攻擊。 ? ? ? ? \*/ $token \= array( "iss" \=> $key,//簽發者 可以為空 "aud" \=> '', ? ? ? ? ?//面象的用戶 可以為空 "iat" \=> $nowtime,//簽發時間 "nbf" \=> $nowtime + 3, ? ?//在什么時候jwt開始生效 "jti" \=> md5(uniqid('JWT') . time()), ? ?//該Token唯一標識 "exp" \=> $nowtime + 200, //token過期時間 "data" \=> \[ //記錄的userid的信息,這里是自已添加上去的,如果有其它信息,可以再添加數組的鍵值對 'uid' \=> $uid, ? ? ? ? ? ? \] ? ? ? ? ); $jwt \= JWT::encode($token, $key, "HS256"); ?//根據參數生成了 token echo $jwt; ? ? } //驗證token function checkToken($token) ? ? { //$token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIhQCMkJSomIiwiYXVkIjoiIiwiaWF0IjoxNjI2NzA2NzgxLCJuYmYiOjE2MjY3MDY3ODQsImp0aSI6ImE0YmE2YTE5NzlkNjcyMDFlOGM1YjQxOWExNjI2ZmUxIiwiZXhwIjoxNjI2NzA2ODgxLCJkYXRhIjp7InVpZCI6MzMwMX19.LZI8WfvNA\_tqkE9Nop35Doa-wWw4R\_ZQlsiZn50Un7w'; $key \= '!@#$%\*&'; $status \= array("code" \=> 2); try { JWT::$leeway \= 60; //當前時間減去60,把時間留點余地,避免多服務器時間有誤差,設置leeway后,token的有效時間就是exp+leeway $decoded \= JWT::decode($token, $key, array('HS256')); //HS256方式,這里要和簽發的時候對應 $arr \= (array)$decoded; ? ? ? ? ? ? $res\['code'\] \= 1; ? ? ? ? ? ? $res\['data'\] \= $arr\['data'\]; print\_r($res); } catch (\\Firebase\\JWT\\SignatureInvalidException $e) { //簽名不正確 ? ? ? ? ? ? $status\['msg'\] \= "簽名不正確"; print\_r($status); } catch (\\Firebase\\JWT\\BeforeValidException $e) { // 簽名在某個時間點之后才能用 ? ? ? ? ? ? $status\['msg'\] \= "token失效"; print\_r($status); } catch (\\Firebase\\JWT\\ExpiredException $e) { // token過期 ? ? ? ? ? ? $status\['msg'\] \= "token失效"; print\_r($status); } catch (Exception $e) { //其他錯誤 ? ? ? ? ? ? $status\['msg'\] \= "未知錯誤"; print\_r($status); ? ? ? ? } ? ? } } ``` 第三步:使用。 生成token ,這里是把用戶id進行加密,當然還可以添加其他參數,比如 ip,手機號,賬戶名等等。把要加密的信息傳給 singToken方法就可以。 1. $user\['token'\] = signToken($user\['id'\]); 4. // token 返回值 6. //eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJtZGMhQCMkIiwiYXVkIjoiIiwiaWF0IjoxNTc5MTU3OTY4LCJuYmYiOjE1NzkxNTc5NzEsImV4cCI6MTU3OTE1ODE2OCwiZGF0YSI6eyJ1aWQiOjV9fQ.mFdRYr\_sf63U5STJoxfOFFRyJj8V4N\_h-sx3hQcZ2qk 驗證 token ,這里的token一般用 header 方式傳送,接收后直接調用 直接調用 common.php 文件的 checkToken方法即可。驗證成功返回加密的token信息。驗證失敗返回提示信息。 1. $token = Request::instance()->header('token'); 2. $res = checkToken($token);
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看