CronTokenMiddleware.php 796 B

123456789101112131415161718192021222324252627
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Closure;
  4. use Illuminate\Http\Request;
  5. /**
  6. * 计划任务 / 运维 URL 的共享密钥校验:?token= 或 X-Cron-Token 需与 CRON_TOKEN 一致;未配置 CRON_TOKEN 时一律拒绝
  7. */
  8. class CronTokenMiddleware
  9. {
  10. public function handle(Request $request, Closure $next)
  11. {
  12. $expected = (string)config('services.cron.token', '');
  13. $token = (string)($request->header('X-Cron-Token') ?: $request->query('token', ''));
  14. if ($expected === '' || !hash_equals($expected, $token)) {
  15. return response()->json([
  16. 'code' => 403,
  17. 'timestamp' => time(),
  18. 'msg' => 'Forbidden',
  19. 'data' => [],
  20. ], 403);
  21. }
  22. return $next($request);
  23. }
  24. }