RefreshTokenRepository.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace oauth2\repository;
  3. use Yii;
  4. use yii\helpers\Json;
  5. use oauth2\entity\RefreshTokenEntity;
  6. use League\OAuth2\Server\Entities\RefreshTokenEntityInterface;
  7. use League\OAuth2\Server\Repositories\RefreshTokenRepositoryInterface;
  8. /**
  9. * Class RefreshTokenRepository
  10. * @package oauth2
  11. * @author jianyan74 <751393839@qq.com>
  12. */
  13. class RefreshTokenRepository implements RefreshTokenRepositoryInterface
  14. {
  15. /**
  16. * 创建新授权码时调用方法
  17. *
  18. * @return RefreshTokenEntity|RefreshTokenEntityInterface|null
  19. */
  20. public function getNewRefreshToken()
  21. {
  22. // 需要返回 RefreshTokenEntityInterface 对象
  23. return new RefreshTokenEntity();
  24. }
  25. /**
  26. * 创建新刷新令牌
  27. *
  28. * @param RefreshTokenEntityInterface $refreshTokenEntity
  29. */
  30. public function persistNewRefreshToken(RefreshTokenEntityInterface $refreshTokenEntity)
  31. {
  32. // 可以使用参数中的 RefreshTokenEntityInterface 对象,获得有价值的信息:
  33. // $refreshTokenEntity->getAccessToken()->getIdentifier(); // 获得访问令牌标识符
  34. // 获得刷新令牌过期时间
  35. $date = $refreshTokenEntity->getExpiryDateTime(); // 获得令牌过期时间
  36. $date = Json::decode(Json::encode($date));
  37. // 创建token
  38. Yii::$app->services->oauth2RefreshToken->create(
  39. $refreshTokenEntity->getAccessToken()->getClient()->getIdentifier(), // 获得客户端标识符
  40. $refreshTokenEntity->getAccessToken()->getClient()->getGrantType(),
  41. $refreshTokenEntity->getIdentifier(), // 获得刷新令牌唯一标识符
  42. $date['date'],
  43. $refreshTokenEntity->getAccessToken()->getUserIdentifier(), // 获得用户标识符
  44. $refreshTokenEntity->getAccessToken()->getScopes()// 获得权限范围
  45. );
  46. }
  47. /**
  48. * 当使用刷新令牌获取访问令牌时调用此方法
  49. * 原刷新令牌将删除,创建新的刷新令牌
  50. *
  51. * @param string $tokenId 刷新令牌唯一标识
  52. */
  53. public function revokeRefreshToken($tokenId)
  54. {
  55. // 可在此删除原刷新令牌
  56. Yii::$app->services->oauth2RefreshToken->deleteByRefreshToken($tokenId);
  57. }
  58. /**
  59. * 当使用刷新令牌获取访问令牌时调用此方法
  60. * 用于验证刷新令牌是否已被删除
  61. *
  62. * @param string $tokenId
  63. * @return bool
  64. */
  65. public function isRefreshTokenRevoked($tokenId)
  66. {
  67. // return true 已删除,false 未删除
  68. return empty(Yii::$app->services->oauth2RefreshToken->findByRefreshToken($tokenId));
  69. }
  70. }
粤ICP备19079148号