You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需客户端代码,如何在Parse Server服务端确定用户API请求/应用启动时间戳?

好问题!Parse Server 默认并没有内置记录用户最后请求时间的功能,但我们可以通过云代码轻松实现,而且完全不需要修改客户端代码——下面分两部分解答你的问题:

确定用户最后一次API请求的时间戳

要获取用户最后一次API请求的时间戳,我们需要先在服务端自动记录这个时间,步骤如下:

  1. 在User类添加字段:首先在Parse Dashboard的User类中新增一个Date类型的字段,比如命名为lastRequestAt,用来存储最后一次请求的时间。

  2. 用云代码钩子自动更新:通过Parse的全局请求钩子Parse.Cloud.beforeRequest,在每次带用户身份验证的API请求触发时,自动更新该用户的lastRequestAt字段。

    云代码示例:

    Parse.Cloud.beforeRequest(async (req) => {
      // 跳过健康检查等无需记录的系统请求
      if (req.url.includes('/health')) {
        return;
      }
      // 仅处理已登录用户的请求
      if (req.user) {
        try {
          req.user.set('lastRequestAt', new Date());
          // 使用主密钥确保更新权限,避免用户权限限制
          await req.user.save(null, { useMasterKey: true });
        } catch (error) {
          console.error('更新用户最后请求时间失败:', error);
        }
      }
    });
    
  3. 查询获取时间戳:之后要获取用户的最后请求时间,只需要查询对应的User对象,读取lastRequestAt字段即可。比如在云函数中:

    Parse.Cloud.define('getUserLastRequestTime', async (req) => {
      const user = req.user;
      if (!user) {
        throw new Parse.Error(Parse.Error.USER_NOT_FOUND, '用户未登录');
      }
      return user.get('lastRequestAt');
    });
    
无需客户端代码,服务端记录用户最后一次应用启动/API请求时间戳

完全可以做到无需客户端代码,核心思路还是利用上面的beforeRequest钩子:

  • 记录最后一次API请求:上面的代码已经实现了——只要用户发起带身份验证的API请求(比如查询数据、保存对象、获取当前用户等),就会自动更新lastRequestAt,全程不需要客户端做任何改动。

  • 记录最后一次应用启动:如果想近似记录应用启动时间,其实可以依赖“应用启动后几乎一定会触发的第一个带用户身份的请求”(比如获取当前用户/users/me)。如果需要更精准区分启动请求和普通请求,而又不想改客户端代码,可以在beforeRequest中过滤特定的API路径,比如只在请求/users/me时更新一个额外的lastAppLaunchAt字段:

    示例代码:

    Parse.Cloud.beforeRequest(async (req) => {
      if (req.url.includes('/health')) {
        return;
      }
      if (req.user) {
        try {
          // 每次请求都更新最后请求时间
          req.user.set('lastRequestAt', new Date());
          // 如果是获取当前用户的请求,视为应用启动,更新启动时间
          if (req.url.includes('/users/me') && req.method === 'GET') {
            req.user.set('lastAppLaunchAt', new Date());
          }
          await req.user.save(null, { useMasterKey: true });
        } catch (error) {
          console.error('更新用户时间字段失败:', error);
        }
      }
    });
    

注意事项

  • 确保云代码已经正确部署到你的Parse Server实例。
  • 使用useMasterKey是为了绕过用户自身的保存权限限制,保证更新操作一定能成功。
  • 可以根据自己的业务需求,调整需要过滤的请求路径,避免不必要的更新操作(比如后台管理的API请求)。

内容的提问来源于stack exchange,提问作者Manuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:13:08