-使用Github的firebase\JWT
-使用Composer安裝此擴充套件
-程式碼示例
<?php
/**
* [InterCommon-介面公用]
* @Author RainCyan
* @DateTime 2019-08-12T16:38:08+0800
*/
namespace app\hladmin\controller;
use think\Controller;
use \Firebase\JWT\JWT;
class InterCommonController extends Controller {
private $key = "123456789";
//客戶端獲取TOKEN
public function _getJwtToken(){
try {
$string = input("string");
if (empty($string)) {
throw new \Exception("請傳入需要加密string", -105);
}
$jwt = $this->_setJwtToken($string);
throw new \Exception($jwt, 200);
} catch (\Exception $e) {
return json(array("code"=>$e->getCode(), "msg"=>$e->getMessage()));
}
}
//簽發token
private function _setJwtToken($string=""){
$key = $this->key;
$time = time();
$token = array(
"iss" => "http://ml.cn",
"aud" => "http://ml.cn",
'iat' => $time, //簽發時間
'nbf' => $time + 10, //在什麼時間之後該jwt才可用
'exp' => $time + 10, //過期時間
"string" => $string
);
$jwt = JWT::encode($token, $key);
return $jwt;
}
//解析token
protected function _readJwtToken($jwt){
$key = $this->key;
try {
JWT::$leeway = 60;//當前時間減去60,把時間留點餘地
$decoded = JWT::decode($jwt, $key, ['HS256']); //HS256方式,這裡要和簽發的時候對應
$arr = (array)$decoded;
return json_msg(200, "success", $arr);
} catch(\Firebase\JWT\SignatureInvalidException $e) { //簽名不正確
return json_msg(-101, $e->getMessage());
}catch(\Firebase\JWT\BeforeValidException $e) { // 簽名在某個時間點之後才能用
return json_msg(-102, $e->getMessage());
}catch(\Firebase\JWT\ExpiredException $e) { // token過期
return json_msg(-103, $e->getMessage());
}catch(Exception $e) { //其他錯誤
return json_msg(-104, $e->getMessage());
}
}
//測試解析
public function _writeJwtToken($token){
halt($this->_readJwtToken($token));
}
}
?>