ThinkPHP简单实现代码封装jwt的使用

ThinkPHP简单实现代码封装jwt的使用

  1. jwt的下载地址:https://jwt.io/
token;
    }

    /**
     * 设置token
     * @param $token
     * @return $this
     */
    public function setToken($token)
    {
        $this->token = $token;
        return $this;
    }

    /**
     * 设置uid
     * @param $uid
     */
    public function setUid($uid)
    {
        $this->uid = $uid;
        return $this;
    }

    /**
     * 编码jwt token
     * @return $this
     */
    public function encode()
    {
        $time = time();
        $this->token = (new Builder())
            ->issuedBy($this->iss)                                  //配置发行人
            ->permittedFor($this->aud)                              //配置的观众
            ->issuedAt($time)                                       //配置令牌发出的时间
            ->canOnlyBeUsedAfter($time + 60)             //配置令牌可使用的时间
            ->expiresAt($time + 3600)                    //设置过期时间
            ->withClaim('uid', $this->uid)                   //自己配置的uid
            ->identifiedBy($this->secrect,true)  //签名算法
            ->getToken();

        return $this;
    }

    /**
     * 从字符串中解析
     * parse string token
     * @return \Lcobucci\JWT\Token
     */
    public function decode()
    {
        if (!$this->decodeToken) {
            $this->decodeToken = (new Parser())->parse((string)$this->token);
            $this->uid = $this->decodeToken->getClaim('uid');
            return $this->decodeToken;
        }
    }

    /**
     * verify token
     * @return bool
     */
    public function verify()
    {
        $result = $this->decode()->verify(new Sha256(),$this->secrect);
        return $result;
    }


    /**
     * 验证tojen有效性
     * validate
     * @return bool
     */
    public function validate()
    {
        $data = new ValidationData();
        $data->setIssuer($this->iss);
        $data->setAudience($this->aud);

        return $this->decode()->validate($data);
    }

}

你可能感兴趣的:(PHP)