久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

實例詳解thinkphp6使用jwt認證

本篇文章給大家帶來了關于thinkphp的相關知識,其中主要介紹了使用jwt認證的問題,下面一起來看一下,希望對大家有幫助。

實例詳解thinkphp6使用jwt認證

推薦學習:《PHP視頻教程》

thinkphp6 使用jwt

  1. 客戶端使用用戶名和密碼請求登錄
  2. 服務端收到請求,驗證用戶名和密碼
  3. 驗證成功后,服務端會簽發一個token,再把這個token返回給客戶端
  4. 客戶端收到token后可以把它存儲起來,比如放到cookie中
  5. 客戶端每次向服務端請求資源時需要攜帶服務端簽發的token,可以在cookie或者header中攜帶
  6. 服務端收到請求,然后去驗證客戶端請求里面帶著的token,如果驗證成功,就向客戶端返回請求數據

安裝 jwt 擴展

composer require firebase/php-jwt

安裝之后在 vender 目錄下的 firebase 文件夾下

實例詳解thinkphp6使用jwt認證

調用 JWT里面的 encode 和 decode方法進行生成token和驗證token

項目app 目錄下的 common.php全局文件使用的 ,做成了公共方法,由于我是多應用的,所以就寫在了api下面的common.php,大家可以根據自己需求適當調整

實例詳解thinkphp6使用jwt認證

首先 引入 JWT ,然后寫兩個方法,生成驗簽和驗證token。

<?phpuse FirebaseJWTJWT;use FirebaseJWTKey;// 應用公共文件/**  * 生成驗簽  * @param $uid 用戶id  * @return mixed  */function signToken($uid){     $key='abcdefg';         //自定義的一個隨機字串用戶于加密中常用的 鹽  salt     $token=array(         "iss"=>$key,        //簽發者 可以為空         "aud"=>'',          //面象的用戶,可以為空         "iat"=>time(),      //簽發時間         "nbf"=>time(),      //在什么時候jwt開始生效         "exp"=> time()+30,  //token 過期時間         "data"=>[           //記錄的uid的信息             'uid'=>$uid,         ]     );     $jwt = JWT::encode($token, $key, "HS256");  //生成了 token     return $jwt;}/**  * 驗證token  * @param $token  * @return array|int[]  */function checkToken($token){     $key='abcdefg';     //自定義的一個隨機字串用戶于加密中常用的 鹽  salt     $res['status'] = false;     try {         JWT::$leeway    = 60;//當前時間減去60,把時間留點余地         $decoded        = JWT::decode($token, new Key($key, 'HS256')); //HS256方式,這里要和簽發的時候對應         $arr            = (array)$decoded;         $res['status']  = 200;         $res['data']    =(array)$arr['data'];         return $res;      } catch(FirebaseJWTSignatureInvalidException $e) { //簽名不正確         $res['info']    = "簽名不正確";         return $res;     }catch(FirebaseJWTBeforeValidException $e) { // 簽名在某個時間點之后才能用         $res['info']    = "token失效";         return $res;     }catch(FirebaseJWTExpiredException $e) { // token過期         $res['info']    = "token過期";         return $res;     }catch(Exception $e) { //其他錯誤         $res['info']    = "未知錯誤";         return $res;     }}

使用jwt生成token

    /**      * 使用jwt生成token字符串      */     public function setJwtToken()     {         $uid = input('uid'); // 接收生成token字符串 如:123         $token = signToken($uid);         // 生成字符串: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhYmNkZWZnIiwiYXVkIjoiIiwiaWF0IjoxNjQxNDUwMTU0LCJuYmYiOjE2NDE0NTAxNTcsImV4cCI6MTY0MTQ1NzM1NCwiZGF0YSI6eyJ1aWQiOiIxMjMifX0.I_GAkMsOhtEpIPkizCuQA-b9H6ovSovWx0AwAYI-b0s         echo $token;die;     }      /**      * 使用jwt驗證token字符串      */     public function checkJwtToken()     {         $token  = input('token'); // 接收生成token字符串         $result = checkToken($token);         // Array ( [status] => 200 [data] => Array ( [uid] => 123 ) )         print_r($result);die;     }

創建 user 控制器

<?phpdeclare (strict_types = 1);namespace appapicontroller;use thinkfacadeDb;use thinkRequest;class User{     public function login(Request $request)     {         if ($request->isPost()){             $username = $request->param('username','','trim');             $password = $request->param('password','','trim');              //查詢數據庫             $user = Db::name('user')->where('username',$username)->find();              if (!$user){                 return json(['status' => 'fail','msg' => '用戶名不存在']);             }             if ($user['password']!==md5($password)){                 return json(['status' => 'fail','msg' => '密碼錯誤']);             }             $getToken = $this->token($user);             return json(['status' => 'success','msg' => '登陸成功','token' => $getToken]);         }     }     public function token($user)     {         $uid = $user['username']; // 接收生成token字符串 如:123         $token = signToken($uid);         dd($token);     }     /**      * 驗證token      */     public function chToken()     {         $token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhYmNkZWZnIiwiYXVkIjoiIiwiaWF0IjoxNjQ4MDkwMDkyLCJuYmYiOjE2NDgwOTAwOTIsImV4cCI6MTY0ODA5MDEyMiwiZGF0YSI6eyJ1aWQiOiJcdTVmMjBcdTRlMDlcdTk4Y2UifX0.oJFpNcZ6stMymOCbD-meX0IPEIYLYNcwKxhMItF2cMw';         $result = checkToken($token);         // Array ( [status] => 200 [data] => Array ( [uid] => 123 ) )         print_r($result);die;     }}

用戶登錄成功返回給前端token,前端將token存儲起來,在下次請求的時候頭部攜帶著這個token,后端接受token,在中間件中進行驗證

創建api中間件

<?phpdeclare (strict_types = 1);namespace appmiddleware;class Api{     /**      * 處理請求      *      * @param thinkRequest $request      * @param Closure       $next      * @return Response      */     public function handle($request, Closure $next)     {         //toke 合法性驗證         $header = $request->header();         //判讀請求頭里有沒有token         if(!isset($header['token'])){             return json(['code'=>440,'msg'=>'request must with token']);         }         $token = $header['token'];          try {             // token 合法             $token = checkToken($token);         }catch (Exception $e){             return json(['code'=>440,'msg'=>'invalid token']);         }          return $next($request);     }}

最后,關于如何處理token過期的問題,有兩種解決辦法,第一種就是,將token的時間設置長一些,這樣token就不會過期,但是這樣就有一個弊端,一旦客戶端拿到了這個token就相當于有了密鑰,主動權也就掌握在了用戶的手上。所以不推薦這種方案。第二種就是,后端處理,當token過期的時候重新獲取token,將新的token傳給前端,前端在將新的token存儲起來,替換掉原來的token,下一次請求的時候就攜帶著新的token請求。

我是程序員峰峰,一名愛學習,愛折騰的程序員。

推薦學習:《PHP視頻教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
国产精品久久久久久久免费观看| 欧美aaaaaa午夜精品| 欧美日韩视频| 青青伊人久久| 欧美精品高清| 久久黄色影院| 婷婷亚洲成人| www.九色在线| 亚洲精品大片| 神马午夜久久| 国产欧美日本| 国产色综合网| 日本一二区不卡| 亚洲精品免费观看| 精品1区2区3区4区| 免费欧美在线视频| 国产精品乱战久久久| 欧美日韩国产欧| 高清一区二区| 亚洲精品乱码久久久久久蜜桃麻豆 | 91国语精品自产拍| 国产精品久久久亚洲一区| 黄色日韩精品| 裤袜国产欧美精品一区| 亚洲一区二区小说| 另类专区亚洲| 国产精品a级| 亚洲精品进入| 亚洲精品电影| 久久激情中文| 免费福利视频一区二区三区| 国产亚洲久久| 日本亚洲欧洲无免费码在线| 免费欧美一区| 视频一区二区三区中文字幕| 久久电影一区| 麻豆mv在线观看| 日本不卡高清视频| 久久精品影视| 久久久影院免费| 91欧美在线| 久久精品天堂| 国产精品成人国产| 美女91精品| 免费精品国产| 久久精品影视| 亚洲精品乱码日韩| 亚洲精品网址| 日韩成人免费| 日韩精品一级| 久久精品1区| av资源中文在线| 国产精品99久久免费| 日韩不卡在线观看日韩不卡视频| 亚洲欧洲一区| 久久蜜桃av| 99精品综合| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲精品免费观看| 欧美日韩免费观看一区=区三区 | 欧美aa国产视频| 国产a亚洲精品| 不卡专区在线| 精品一区二区三区亚洲| 日韩福利视频导航| 国产伦精品一区二区三区视频| 国产欧美一区二区精品久久久| 国产日产一区| 美女精品一区二区| 97国产精品| 在线中文字幕播放| 久久精品二区三区| 中文日韩在线| 日韩不卡一二三区| 卡一卡二国产精品| 精品黄色一级片| 激情国产在线| 尹人成人综合网| 国产欧美一区二区色老头| 欧美不卡在线| 亚洲国产综合在线看不卡| 日韩理论片av| 国产一在线精品一区在线观看| 欧美激情福利| 亚洲福利免费| 日韩动漫一区| 久久久国产亚洲精品| 亚洲欧美视频一区二区三区| 91麻豆精品| 成人啊v在线| 日韩激情中文字幕| 99视频在线精品国自产拍免费观看| 日韩在线二区| 国产精品videossex| 国产精品久久久久久模特| 久久xxxx精品视频| 欧美伊人久久| 久久国产日韩| 国产精品亚洲欧美| 四虎4545www国产精品| 日产欧产美韩系列久久99| 精品视频在线你懂得| 亚洲黄色在线| 精品一区不卡| 蜜桃av一区| 国产毛片精品| 免费视频一区三区| 国产精品多人| 视频一区欧美日韩| 欧美羞羞视频| 国产欧美一区二区三区精品观看| 欧美日韩高清| 久久一区精品| 亚洲精品动态| 美腿丝袜亚洲一区| 国产精品日韩久久久| 欧美性www| 好看的亚洲午夜视频在线| 国产一区国产二区国产三区| 水蜜桃久久夜色精品一区的特点| 日韩激情网站| 国产精品88久久久久久| 国产精品www994| 视频一区二区国产| 久久一区二区三区喷水| 麻豆传媒一区二区三区| 日本伊人午夜精品| 不卡一区综合视频| 国产一区二区三区黄网站| 日韩中文字幕一区二区三区| 成人看片网站| 久久爱www成人| 亚洲欧美激情诱惑| 神马日本精品| 国产精品久久久久久久免费观看 | 日本va欧美va精品发布| 欧美久久精品一级c片| 欧美日韩视频| 亚洲97av| av最新在线| 久久久蜜桃一区二区人| 石原莉奈一区二区三区在线观看| 国产精品theporn| 黄色亚洲大片免费在线观看| 欧美日本精品| 亚洲视频电影在线| 日韩一级网站| 9色精品在线| 午夜久久影院| 日韩一区二区三区在线免费观看| 麻豆精品在线| 精品一区二区三区的国产在线观看| 日韩va欧美va亚洲va久久| 亚洲v天堂v手机在线| 男人的天堂亚洲一区| 免费视频久久| 亚洲九九精品| 综合国产精品| 一本一道久久a久久| 亚洲福利国产| 久久精品主播| 成人国产精品久久| 成人高清一区| 中文字幕av一区二区三区人| 91精品精品| 日韩中出av| 日韩高清不卡一区二区| 国产v日韩v欧美v| 99在线|亚洲一区二区| 天堂久久av| 好吊一区二区三区| 精品美女视频 | 亚洲高清激情| yellow在线观看网址| 日韩精品一区二区三区中文在线 | 日韩一区精品字幕| 久久精品女人| 日韩中文字幕区一区有砖一区| 老司机免费视频一区二区三区| 综合五月婷婷| 亚洲午夜天堂| 视频在线观看一区二区三区| 亚洲国产成人精品女人| 国产精品一区二区av日韩在线| 亚洲成人免费| av资源中文在线| 青青在线精品| 丝瓜av网站精品一区二区| 久久中文字幕av| 在线看片福利| 精品国产精品国产偷麻豆| 国产亚洲一区二区三区啪| 国精品一区二区| 三级小说欧洲区亚洲区| 久久精品欧洲| 国产精品一区二区三区www| 亚洲成人精品| 你懂的国产精品| 日韩精品视频中文字幕| 91久久国产|