Token.php 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace app\controller\api;
  3. use laytp\controller\Api;
  4. use laytp\library\Random;
  5. /**
  6. * Token相关
  7. */
  8. class Token extends Api
  9. {
  10. public $no_need_login = [];
  11. /*@formatter:off*/
  12. /**
  13. * @ApiTitle (检测Token是否过期)
  14. * @ApiSummary (检测Token是否过期)
  15. * @ApiMethod (POST)
  16. * @ApiRoute (/api.token/check)
  17. * @ApiHeaders (name="token", type="string", required="true", description="用户登录后得到的Token")
  18. * @ApiReturnParams (name="code", type="integer", description="接口返回码.0=常规正确码,表示常规操作成功;1=常规错误码,客户端仅需提示msg;其他返回码与具体业务相关。框架实现了的唯一其他返回码:10401,前端需要跳转至登录界面。在一个复杂的交互过程中,你可能需要自行定义其他返回码")
  19. * @ApiReturnParams (name="msg", type="string", description="返回描述")
  20. * @ApiReturnParams (name="time", type="integer", description="请求时间,Unix时间戳,单位秒")
  21. * @ApiReturnParams (name="data", type="object", description="返回的数据对象")
  22. * @ApiReturnParams (name="data.token", type="string", description="用户登录凭证,token")
  23. * @ApiReturnParams (name="data.expires_in", type="integer", description="token有效时间,单位秒")
  24. * @ApiReturn
  25. ({
  26. "code": 0,
  27. "msg": "Token有效",
  28. "time": 1591167181,
  29. "data": {
  30. "token": "827fb87e-2064-45c8-839a-128e195a7411",
  31. "expires_in": 1789
  32. }
  33. })
  34. */
  35. /*@formatter:on*/
  36. public function check()
  37. {
  38. $token = $this->service_user->getToken();
  39. $tokenInfo = \library\Token::get($token);
  40. $this->success('Token有效', ['token' => $tokenInfo['token'], 'expires_in' => $tokenInfo['expires_in']]);
  41. }
  42. /*@formatter:off*/
  43. /**
  44. * @ApiTitle (刷新Token)
  45. * @ApiSummary (刷新Token)
  46. * @ApiMethod (POST)
  47. * @ApiRoute (/api.token/refresh)
  48. * @ApiHeaders (name="token", type="string", required="true", description="用户登录后得到的Token")
  49. * @ApiReturnParams (name="code", type="integer", description="接口返回码.0=常规正确码,表示常规操作成功;1=常规错误码,客户端仅需提示msg;其他返回码与具体业务相关。框架实现了的唯一其他返回码:10401,前端需要跳转至登录界面。在一个复杂的交互过程中,你可能需要自行定义其他返回码")
  50. * @ApiReturnParams (name="msg", type="string", description="返回描述")
  51. * @ApiReturnParams (name="time", type="integer", description="请求时间,Unix时间戳,单位秒")
  52. * @ApiReturnParams (name="data", type="object", description="返回的数据对象")
  53. * @ApiReturnParams (name="data.token", type="string", description="用户登录凭证,token")
  54. * @ApiReturnParams (name="data.expires_in", type="integer", description="token有效时间,单位秒")
  55. * @ApiReturn
  56. ({
  57. "code": 0,
  58. "msg": "成功刷新Token",
  59. "time": 1591167423,
  60. "data": {
  61. "token": "e356df60-ff03-4f15-bb66-c0e3ef37f335",
  62. "expires_in": 1800
  63. }
  64. })
  65. */
  66. /*@formatter:on*/
  67. public function refresh()
  68. {
  69. //删除源Token
  70. $token = $this->service_user->getToken();
  71. \library\Token::delete($token);
  72. //创建新Token
  73. $token = Random::uuid();
  74. \library\Token::set($token, $this->service_user->id, $this->service_user->token_keep_time);
  75. $this->success('成功刷新Token', ['token' => $token, 'expires_in' => $this->service_user->token_keep_time]);
  76. }
  77. }