CheckToken.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Closure;
  4. use Illuminate\Http\Request;
  5. class CheckToken
  6. {
  7. public function handle(Request $request, Closure $next)
  8. {
  9. // 检查是否有 token
  10. $token = $this->getTokenFromRequest($request);
  11. if (!$token || $token === 'null' || $token === 'undefined') {
  12. // 将 token 设置为空
  13. $request->headers->set('Authorization', '');
  14. return response()->json([
  15. 'code' => 401,
  16. 'timestamp' => time(),
  17. 'msg' => '请先登录',
  18. 'data' => []
  19. ]);
  20. }
  21. return $next($request);
  22. }
  23. /**
  24. * 从请求中获取 token
  25. */
  26. protected function getTokenFromRequest(Request $request): ?string
  27. {
  28. $token = $request->bearerToken();
  29. // 如果没有 bearer token,尝试从其他位置获取
  30. if (!$token) {
  31. $token = $request->query('token');
  32. }
  33. if (!$token) {
  34. $token = $request->input('token');
  35. }
  36. // 检查 token 是否有效
  37. if ($this->isEmptyToken($token)) {
  38. return null;
  39. }
  40. return $token;
  41. }
  42. /**
  43. * 检查 token 是否为空
  44. */
  45. protected function isEmptyToken($token): bool
  46. {
  47. return empty($token) ||
  48. $token === 'null' ||
  49. $token === 'undefined' ||
  50. $token === 'Bearer' ||
  51. trim($token) === '';
  52. }
  53. }