php 中使用JWT進行身份驗證

2020-10-11 16:00:17

首先在我的laravel專案中Vendor資料夾下 引入  第三方jwt類包

以下貼一下 我的程式碼簡單流程,

 

1):JWT加密

 

protected $key;

public function __construct()
{
    $this->key = env('MINI_SHOP_TOKEN');
}
 /**
  * @return string  JWT加密
  */
public function encryption()
 {
     $time = time();
     $exp_time = time()+1800;//正式30天 測試30分鐘

     $payload = array(
         "iss" => "http://www.baidu.com",
         "aud" => "http://www.baidu.com",
         "iat" => $time,//簽發時間
         "nbf" => $time,//生效時間,在此之前是無效的
         "exp" => $exp_time,//有效期
         "uid" => 56
     );

     $token = JWT::encode($payload,$this->key);

   //  WxShopToken::toFirstOrCreate(['uid'=>56,'u_token'=>$token,'exp_time'=>$exp_time]);
     return $token;
 }

 

此可在登入的時候進行JWT加密,將使用者資訊 進行加密,返還給前端人員。後端也可根據此token解密 出對應使用者資訊

2)JWT解密

 public function decryption($token)
{
    $token="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC93d3cudmUtbGluay5jb20iLCJhdWQiOiJodHRwOlwvXC93d3cudmUtbGluay5jb20iLCJpYXQiOjE2MDIyMjI1NTYsIm5iZiI6MTYwMjIyMjU1NiwiZXhwIjoxNjAyMjI0MzU2LCJ1aWQiOjU2fQ.4uuyCeIr-SwVjHCs-Ev5vU5vSoL0sJfJxU6a2YutJ7Q";  //此次是傳一個測試token以供解密
    $decoded = JWT::decode($token, $this->key, array('HS256'));

    $decoded = (array) $decoded;

    return isset($decoded['uid']) ? $decoded['uid'] : 0;

}