OpsToken.php 982 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Closure;
  4. use Illuminate\Http\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. /**
  7. * 运维接口鉴权中间件
  8. *
  9. * 从请求头 Authorization: Bearer <token> 中解析 token,
  10. * 与 config('mint.app.ops_token')(.env 中的 APP_OPS_TOKEN)比对,
  11. * 不匹配时返回 403。
  12. */
  13. class OpsToken
  14. {
  15. /**
  16. * Handle an incoming request.
  17. *
  18. * @param Closure(Request): (Response) $next
  19. */
  20. public function handle(Request $request, Closure $next): Response
  21. {
  22. $expected = (string) config('mint.app.ops_token');
  23. $token = (string) $request->bearerToken();
  24. if ($expected === '' || $token === '' || ! hash_equals($expected, $token)) {
  25. return response()->json([
  26. 'ok' => false,
  27. 'data' => null,
  28. 'message' => 'Forbidden',
  29. ], 403, [], JSON_UNESCAPED_UNICODE);
  30. }
  31. return $next($request);
  32. }
  33. }