| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- <?php
- namespace App\Service;
- use Firebase\JWT\JWT;
- use Firebase\JWT\Key;
- class TokenService
- {
- public static function getToken($user, $ttl = 0) {
- $key = config('jwt.key');
- if(! $ttl) $ttl = config('jwt.ttl');
- if(empty($key)) return [false, 'JWT_KEY暂未配置'];
- $token = array(
- "iat"=> time(), //签发时间
- "nbf"=> time() - 1, //生效时间 (立即生效)
- "exp"=> time() + $ttl,
- "data"=> [
- 'employee_id' => $user['id'],
- 'p_version' => $user['p_version']
- ]
- );
- return [true, JWT::encode($token, $key,"HS256")];
- }
- public static function verifyToken($token){
- try {
- $key = config('jwt.key');
- if(empty($key)) return [false, 'JWT_KEY暂未配置'];
- JWT::$leeway = 60;//当前时间减去60,把时间留点余地,同步其他服务器时间,解决nbf字段验证不通过问题
- $decoded = JWT::decode($token,new Key($key, "HS256")); //HS256方式,这里要和签发的时候对应
- $employee = (array)$decoded->data;
- return [true, $employee];
- } catch (\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
- return [false, "签名不正确"];
- } catch (\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
- return [false, "签名在某个时间点之后才能用"];
- } catch (\Firebase\JWT\ExpiredException $e) { // token过期
- return [false, "签名过期"];
- } catch (\Exception $e) { //其他错误
- return [false, "未知错误"];
- }
- }
- }
|