ThinkPHP5 使用 JWT 进行加密

使用 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));

    }

}

?>
   

猜你喜欢

转载自www.cnblogs.com/it-3327/p/11743192.html