| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | <?phpnamespace App\Service;use Firebase\JWT\JWT;use Firebase\JWT\Key;class TokenService{    const key = "t_nine"; //签发人  可空    const validity = 8640000; //有效期    const error = [        -1 => "签名不正确",        -2 => "签名在某个时间点之后才能用",        -3 => "签名过期,重新登录",        -4 => "未知错误"    ];    /**     * Created by PhpStorm.     * User: Administrator     * Date: 2023/3/13     * Time: 16:43     * 获取token(登录以后)     */    public static function getToken($userId) :string{        $token = array(            "iat"=> time(), //签发时间            "nbf"=> time() - 1, //生效时间  (立即生效)            "exp"=> time() + self::validity,            "data"=> [                'user_id' => $userId            ]        );        return JWT::encode($token,self::key,"HS256");    }    /**     * Created by PhpStorm.     * User: Administrator     * Date: 2023/3/13     * Time: 16:52     * 解密token     */    public static function verifyToken($token){        try {            JWT::$leeway = 60;//当前时间减去60,把时间留点余地,同步其他服务器时间,解决nbf字段验证不通过问题            $decoded = JWT::decode($token,new Key(self::key, "HS256")); //HS256方式,这里要和签发的时候对应            $arr = (array)$decoded;            return $arr['data']->user_id;        } catch (\Firebase\JWT\SignatureInvalidException $e) { //签名不正确            return -1;        } catch (\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用            return -2;        } catch (\Firebase\JWT\ExpiredException $e) { // token过期            return -3;        } catch (\Exception $e) { //其他错误            return -4;        }    }}
 |