Driver.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace app\common\library\token;
  3. use think\facade\Config;
  4. /**
  5. * Token 驱动抽象类
  6. */
  7. abstract class Driver
  8. {
  9. /**
  10. * 具体驱动的句柄 Mysql|Redis
  11. * @var object
  12. */
  13. protected object $handler;
  14. /**
  15. * @var array 配置数据
  16. */
  17. protected array $options = [];
  18. /**
  19. * 设置 token
  20. * @param string $token Token
  21. * @param string $type Type
  22. * @param int $userId 用户ID
  23. * @param ?int $expire 过期时间
  24. * @return bool
  25. */
  26. abstract public function set(string $token, string $type, int $userId, int $expire = null): bool;
  27. /**
  28. * 获取 token 的数据
  29. * @param string $token Token
  30. * @return array
  31. */
  32. abstract public function get(string $token): array;
  33. /**
  34. * 检查token是否有效
  35. * @param string $token
  36. * @param string $type
  37. * @param int $userId
  38. * @return bool
  39. */
  40. abstract public function check(string $token, string $type, int $userId): bool;
  41. /**
  42. * 删除一个token
  43. * @param string $token
  44. * @return bool
  45. */
  46. abstract public function delete(string $token): bool;
  47. /**
  48. * 清理一个用户的所有token
  49. * @param string $type
  50. * @param int $userId
  51. * @return bool
  52. */
  53. abstract public function clear(string $type, int $userId): bool;
  54. /**
  55. * 返回句柄对象
  56. * @access public
  57. * @return object|null
  58. */
  59. public function handler(): ?object
  60. {
  61. return $this->handler;
  62. }
  63. /**
  64. * @param string $token
  65. * @return string
  66. */
  67. protected function getEncryptedToken(string $token): string
  68. {
  69. $config = Config::get('buildadmin.token');
  70. return hash_hmac($config['algo'], $token, $config['key']);
  71. }
  72. /**
  73. * @param int $expireTime
  74. * @return int
  75. */
  76. protected function getExpiredIn(int $expireTime): int
  77. {
  78. return $expireTime ? max(0, $expireTime - time()) : 365 * 86400;
  79. }
  80. }