zoukankan      html  css  js  c++  java
  • ThinkPHP5 使用 JWT 进行加密

    使用 Github 的 firebaseJWT

    - 使用 Composer 安装此扩展

    - 代码示例

    <?php
    
    /**
    
     * [InterCommon-接口公用]
    
     * @Author   RainCyan
    
     * @DateTime 2019-08-12T16:38:08+0800
    
     */
    
    namespace apphladmincontroller;
    
    use thinkController;
    
    use FirebaseJWTJWT;
    
    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(FirebaseJWTSignatureInvalidException $e) {  //签名不正确
    
                return json_msg(-101, $e->getMessage());
    
            }catch(FirebaseJWTBeforeValidException $e) {  // 签名在某个时间点之后才能用
    
                return json_msg(-102, $e->getMessage());
    
            }catch(FirebaseJWTExpiredException $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));
    
        }
    
    }
    
    ?>
    
       

    链接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 提取码:x2p5

    免费分享,但是X度限制严重,如若链接失效点击链接或搜索加群 群号518475424

  • 相关阅读:
    【数论】线性模方程
    【数论】拓展欧几里得
    BZOJ1433: [ZJOI2009]假期的宿舍
    BZOJ2823: [AHOI2012]信号塔
    BZOJ1088: [SCOI2005]扫雷Mine
    BZOJ1257: [CQOI2007]余数之和sum
    BZOJ1227: [SDOI2009]虔诚的墓主人
    BZOJ1856: [Scoi2010]字符串
    BZOJ1084: [SCOI2005]最大子矩阵
    BZOJ2007: [Noi2010]海拔
  • 原文地址:https://www.cnblogs.com/it-3327/p/11743192.html
Copyright © 2011-2022 走看看