AuthTokenMiddleware.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace app\http\middleware;
  3. use app\models\user\User;
  4. use app\models\user\UserSpread;
  5. use app\models\user\UserToken;
  6. use app\Request;
  7. use crmeb\exceptions\AuthException;
  8. use crmeb\interfaces\MiddlewareInterface;
  9. use crmeb\repositories\UserRepository;
  10. use think\db\exception\DataNotFoundException;
  11. use think\db\exception\ModelNotFoundException;
  12. use think\exception\DbException;
  13. /**
  14. * token验证中间件
  15. * Class AuthTokenMiddleware
  16. * @package app\http\middleware
  17. */
  18. class AuthTokenMiddleware implements MiddlewareInterface
  19. {
  20. public function handle(Request $request, \Closure $next, bool $force = true)
  21. {
  22. $request->filter(['htmlspecialchars', 'strip_tags', 'addslashes', 'trim']);
  23. $authInfo = null;
  24. $token = trim(ltrim($request->header('Authori-zation'), 'Bearer'));
  25. if (!$token) $token = trim(ltrim($request->header('Authorization'), 'Bearer'));//正式版,删除此行,某些服务器无法获取到token调整为 Authori-zation
  26. try {
  27. $authInfo = UserRepository::parseToken($token);
  28. if (!is_null($authInfo)) {
  29. $authInfo['user']['lock_spread_user'] = User::where('uid', $authInfo['user']->spread_uid)->field('nickname,phone,avatar')->find();
  30. if (!$authInfo['user']['lock_spread_user']) {
  31. $spread_user = UserSpread::where('uid', $authInfo['user']->uid)->order('spread_time', 'desc')->find();
  32. if ($spread_user) {
  33. $sp = $spread_user['spread_uid'];
  34. $userlist = User::column('uid,spread_uid', 'uid');
  35. while ($sp) {
  36. if ($sp == $authInfo['user']->uid) {
  37. $spread_user['spread_uid'] = 0;
  38. break;
  39. }
  40. $sp = $userlist[$sp]['spread_uid'];
  41. }
  42. if (!$spread_user['spread_uid']) {
  43. $authInfo['user']['unlock_spread_user'] = null;
  44. } else {
  45. $authInfo['user']['unlock_spread_user'] = User::where('uid', $spread_user['spread_uid'])->field('nickname,phone,avatar')->find();
  46. }
  47. } else {
  48. $authInfo['user']['unlock_spread_user'] = null;
  49. }
  50. } else {
  51. $authInfo['user']['unlock_spread_user'] = null;
  52. }
  53. }
  54. } catch (AuthException $e) {
  55. if ($force)
  56. return app('json')->make($e->getCode(), $e->getMessage());
  57. }
  58. if (!is_null($authInfo)) {
  59. Request::macro('user', function () use (&$authInfo) {
  60. return $authInfo['user'];
  61. });
  62. Request::macro('tokenData', function () use (&$authInfo) {
  63. return $authInfo['tokenData'];
  64. });
  65. }
  66. Request::macro('isLogin', function () use (&$authInfo) {
  67. return !is_null($authInfo);
  68. });
  69. Request::macro('uid', function () use (&$authInfo) {
  70. return is_null($authInfo) ? 0 : $authInfo['user']->uid;
  71. });
  72. return $next($request);
  73. }
  74. }