Menu

记录用户来源

提示

此功能从 v2.2.0 版本开始提供,可参考更新记录进行升级。

功能介绍

在产品推广过程中,准确判断用户来源是一项重要工作。为此,Nexty 为开发者提供了记录用户首次登录来源的功能。

当新用户访问带参数的 URL 时(如:http://localhost:3000/?utm_source=nexty),系统会自动抓取 URL 中的参数并记录到 cookie 中:

cookie

用户首次登录时,cookie 中记录的值会被保存到 users 表的 referral 字段,同时删除该 cookie。如果用户的 cookie 中没有来源记录,则 users 表的 referral 字段会记录为 direct

referral

二次开发扩展

修改跟踪参数

要修改跟踪的 URL 参数,只需更新 referralParams 数组,参数的优先级与数组元素顺序一致:

middleware.ts
const referralParams = ['utm_source', 'ref', 'via', 'aff', 'referral', 'referral_code'];

默认情况下未设置 cookie 过期时间,关闭浏览器后 cookie 会自动过期。如果希望来源信息长时间保存,可通过以下方式设置 cookie 过期时间:

middleware.ts
supabaseResponse.cookies.set('referral_source', referralValue, {
  maxAge: 7 * 24 * 60 * 60 // 7 天
});

添加其他登录方法

如果你添加了其他登录方法,需要用相同的方式传递 URL 参数:

components/providers/AuthProvider.tsx
const signInWithGithub = async () => {
  const redirectUrl = new URL(`${window.location.origin}/auth/callback`);
 
  // 添加来源信息
  const referral = getReferral();
  redirectUrl.searchParams.set("referral", referral || "direct");
 
  if (next) {
    redirectUrl.searchParams.set("next", next);
  }
  return await supabase.auth.signInWithOAuth({
    provider: "github",
    options: {
      redirectTo: redirectUrl.toString(),
    },
  });
};

保存到数据库

最后在登录回调方法中将来源信息保存到数据库:

app/auth/callback/route.ts
await supabase.rpc(
  'update_my_profile',
  {
    new_full_name: user.user_metadata?.full_name || user.user_metadata?.name || '',
    new_avatar_url: user.user_metadata?.avatar_url || '',
    new_referral: referral
  }
);