Home >PHP Framework >ThinkPHP >ThinkPHP5 uses JWT for encryption

ThinkPHP5 uses JWT for encryption

藏色散人
藏色散人forward
2019-08-19 14:18:065979browse

ThinkPHP5 uses JWT for encryption

Using Github's firebase\JWT

- Install this extension using Composer - Code Example

<?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",
            &#39;iat&#39; => $time, //签发时间
            &#39;nbf&#39; => $time + 10, //在什么时间之后该jwt才可用
            &#39;exp&#39; => $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, [&#39;HS256&#39;]); //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));
    }
}
?>

This article comes from the ThinkPHP framework technical article column:

http://www.php.cn/phpkj/thinkphp/

The above is the detailed content of ThinkPHP5 uses JWT for encryption. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:learnku.com. If there is any infringement, please contact admin@php.cn delete
Previous article:thinkphp i methodNext article:thinkphp i method