UpdateActivityTimeMiddleware.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Module\User\Middleware;
  3. use App\Module\AppGame\SessionApp;
  4. use App\Module\User\Services\UserActivityService;
  5. use Closure;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Log;
  8. /**
  9. * 更新用户活动时间中间件
  10. *
  11. * 在用户进行任何需要登录的操作时,更新用户的最后活动时间
  12. */
  13. class UpdateActivityTimeMiddleware
  14. {
  15. /**
  16. * 处理传入的请求
  17. *
  18. * @param Request $request
  19. * @param Closure $next
  20. * @return mixed
  21. */
  22. public function handle(Request $request, Closure $next)
  23. {
  24. // 先处理请求
  25. $response = $next($request);
  26. try {
  27. // 获取当前登录用户ID
  28. $userId = SessionApp::getUserId();
  29. if ($userId > 0) {
  30. // 异步更新用户活动时间,避免影响响应速度
  31. $this->updateUserActivityTime($userId);
  32. }
  33. } catch (\Exception $e) {
  34. // 记录错误但不影响正常响应
  35. Log::error('更新用户活动时间失败', [
  36. 'error' => $e->getMessage(),
  37. 'request_uri' => $request->getRequestUri(),
  38. 'user_agent' => $request->userAgent(),
  39. ]);
  40. }
  41. return $response;
  42. }
  43. /**
  44. * 更新用户活动时间
  45. *
  46. * @param int $userId
  47. * @return void
  48. */
  49. protected function updateUserActivityTime(int $userId): void
  50. {
  51. try {
  52. // 使用服务类更新活动时间,利用其缓存机制避免频繁数据库写入
  53. UserActivityService::updateActivityTime($userId);
  54. Log::debug('用户活动时间更新请求已处理', [
  55. 'user_id' => $userId
  56. ]);
  57. } catch (\Exception $e) {
  58. Log::error('用户活动时间更新失败', [
  59. 'user_id' => $userId,
  60. 'error' => $e->getMessage()
  61. ]);
  62. }
  63. }
  64. }