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

如何每月更新免费套餐用户的App Credits?Supabase实现方案咨询

解决方案:每月重置免费用户额度

方案一:Vercel定时任务调用Supabase API实现

认证配置与代码实现

  • 从Supabase控制台获取服务角色密钥(而非匿名密钥),该密钥拥有全库操作权限,支持批量修改用户数据。
  • 在Vercel项目的环境变量中添加SUPABASE_SERVICE_ROLE_KEY和SUPABASE_URL两个变量,分别填入服务角色密钥和你的Supabase项目地址。
  • 编写定时任务的JavaScript处理函数:
import { createClient } from '@supabase/supabase-js';

const supabase = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_SERVICE_ROLE_KEY,
  { auth: { autoRefreshToken: false, persistSession: false } }
);

export default async function handler() {
  const { error } = await supabase
    .from("users")
    .update({ app_credits: 100 })
    .eq("plan", "free");

  if (error) {
    return new Response(JSON.stringify({ error: error.message }), { status: 500 });
  }
  return new Response(JSON.stringify({ message: "免费用户额度重置完成" }), { status: 200 });
}
  • 在Vercel定时任务面板设置每月1号执行该函数即可。

方案二:Supabase内部定时执行SQL更新

实现步骤

  • 打开Supabase控制台的SQL编辑器,创建存储函数:
CREATE OR REPLACE FUNCTION reset_free_user_credits()
RETURNS void AS $$
BEGIN
  UPDATE users SET app_credits = 100 WHERE plan = 'free';
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
  • 创建定时任务(依赖Supabase默认启用的pg_cron扩展):
SELECT cron.schedule(
  'monthly-reset-free-credits', -- 自定义任务名称
  '0 0 1 * *', -- Cron表达式:每月1号0点执行
  'SELECT reset_free_user_credits();'
);
  • 验证任务:执行SELECT * FROM cron.job;可查看已创建的定时任务列表。

注意:SECURITY DEFINER确保函数以创建者权限执行,具备修改users表的权限;pg_cron默认使用UTC时区,若需适配本地时区,可在Supabase控制台的数据库设置中调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:14:53