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

Unity集成Firebase邮箱认证优化:求替代15秒未验证账号删除方案

可行解决方案(适合大学项目)

方案1:延迟创建认证用户,先存临时信息

  • 用户提交注册信息(邮箱、密码)时,不直接创建Firebase Auth用户,而是把信息暂存到Realtime Database的临时节点(比如/temp-users/{唯一ID}),同时生成一个唯一验证token绑定到该临时用户。
  • 给用户发送验证邮件,邮件链接包含这个token。
  • 用户点击链接验证后,前端通过token找到临时节点的信息,调用Firebase Auth的CreateUserWithEmailAndPassword创建正式用户,再把用户信息写入正式DB节点,最后删除临时节点的数据。
  • 优点:未验证的用户完全不会进入Auth系统,避免垃圾数据;逻辑简单,不需要复杂工具。
  • 注意:临时存储的密码可以用Unity自带的Base64加密实现,或者因项目规模小暂时明文存储(不推荐但可接受)。

方案2:标记未验证用户+定时批量清理

  • 用户注册时正常创建Auth用户,同时调用SetCustomUserClaims给用户添加自定义声明{"isVerified": false}。
  • 用户验证邮箱后,更新该声明为{"isVerified": true},再写入Realtime DB。
  • 写一段极简的Firebase云函数(Node.js入门级代码),设置定时触发(比如每天一次),查询所有isVerified: false且创建时间超过24小时的用户,批量删除。
  • 优点:逻辑直观,云函数代码量极少,适合大学项目快速搭建;给用户充足的验证时间(比15秒合理)。
  • 示例云函数代码:
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();

exports.cleanUnverifiedUsers = functions.pubsub.schedule("every 24 hours").onRun(async (context) => {
  const cutoffTime = Date.now() - 24 * 60 * 60 * 1000; // 24小时前的时间戳
  const users = await admin.auth().listUsers();
  
  const deletePromises = users.users
    .filter(user => !user.emailVerified && user.metadata.creationTime < cutoffTime)
    .map(user => admin.auth().deleteUser(user.uid));
  
  await Promise.all(deletePromises);
  console.log(`Deleted ${deletePromises.length} unverified users`);
});

方案3:限制未验证用户权限+手动定期清理

  • 用户注册时正常创建Auth用户,但通过Realtime Database的安全规则,完全限制未验证邮箱用户的访问:
{
  "rules": {
    ".read": "auth != null && auth.token.email_verified == true",
    ".write": "auth != null && auth.token.email_verified == true"
  }
}
  • 这样未验证的用户即使存在于Auth系统,也无法访问任何DB资源,相当于无效用户。
  • 每隔几天登录Firebase控制台,进入「Authentication」页面,筛选「未验证邮箱」的用户,批量删除即可。
  • 优点:几乎不需要写代码,完全依赖Firebase自带功能;适合用户量小的大学项目,手动清理成本极低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:23:16