记录用户来源
提示
此功能从 v2.2.0 版本开始提供,可参考更新记录进行升级。
功能介绍
在产品推广过程中,准确判断用户来源是一项重要工作。为此,Nexty 为开发者提供了记录用户首次登录来源的功能。
当新用户访问带参数的 URL 时(如:http://localhost:3000/?utm_source=nexty
),系统会自动抓取 URL 中的参数并记录到 cookie 中:

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

二次开发扩展
修改跟踪参数
要修改跟踪的 URL 参数,只需更新 referralParams
数组,参数的优先级与数组元素顺序一致:
middleware.ts
const referralParams = ['utm_source', 'ref', 'via', 'aff', 'referral', 'referral_code'];
设置 Cookie 过期时间
默认情况下未设置 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
}
);