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

Flutter Firebase中如何通过自有邮箱发送OTP完成邮箱验证

Flutter+Firebase 自定义邮箱OTP验证实现方案

核心思路

绕过Firebase默认的邮件验证链路,自行实现OTP的生成、存储、发送、校验全流程,校验通过后通过Firebase Admin SDK手动同步用户的邮箱验证状态即可。

具体实现步骤

  • 1. 引入依赖

    在pubspec.yaml中添加必要依赖:
    dependencies:
      flutter:
        sdk: flutter
      firebase_core: ^2.24.2 # 替换为当前最新稳定版
      firebase_auth: ^4.15.1 # 替换为当前最新稳定版
      cloud_firestore: ^4.13.6 # 替换为当前最新稳定版,用于存储OTP及过期信息
    
    生产环境推荐额外自备后端服务处理邮件发送逻辑,避免发件邮箱密钥泄露。测试阶段可使用flutter_email_sender等前端邮件发送插件快速验证流程。
  • 2. OTP生成与存储

    用户提交注册邮箱后,生成6位随机数字作为OTP,同时设置5-15分钟的有效时长,将OTP、过期时间戳、用户邮箱、用户UID绑定存储到Cloud Firestore中,参考存储结构:
    用户集合users/{用户UID}:
      email: "xxx@example.com"
      otp: "123456"
      otp_expire_at: 1700000000000 # 毫秒级时间戳
      is_verified: false
    
  • 3. 自定义邮箱发送OTP

    • 生产方案(推荐):前端将用户邮箱、生成的OTP传给自有后端,后端使用你指定的发件邮箱调用邮件服务接口发送自定义内容的OTP邮件,全程不暴露发件箱敏感配置
    • 测试方案:前端集成邮件发送插件,配置发件箱SMTP信息直接发送,该方案仅可用于本地测试,禁止上线使用
  • 4. OTP校验与状态同步

    用户输入OTP后,先拉取Firestore中对应用户的存储数据做两层校验:
    1. 校验当前时间是否超过otp_expire_at,超时则提示OTP已过期,需重新发送
    2. 校验用户输入的OTP与存储的OTP是否一致
      两层校验均通过后,更新Firestore中用户的is_verified字段为true,再通过Firebase Admin SDK(可通过云函数/自有后端调用)更新Firebase Auth中用户的emailVerified状态为true,云函数核心代码参考(Node.js):
    const functions = require('firebase-functions');
    const admin = require('firebase-admin');
    admin.initializeApp();
    
    exports.syncEmailVerifyStatus = functions.firestore
      .document('users/{uid}')
      .onUpdate(async (change, context) => {
        const newData = change.after.data();
        if (newData.is_verified === true) {
          await admin.auth().updateUser(context.params.uid, {
            emailVerified: true
          });
        }
      });
    
    注意:Firebase客户端SDK无权限直接修改emailVerified字段,必须通过Admin SDK完成状态同步。
  • 5. 登录态校验

    后续用户登录时,先读取FirebaseAuth.instance.currentUser?.emailVerified字段,状态为false则直接跳转至OTP验证页面,完成验证前禁止使用核心功能。

注意事项

生产环境必须将OTP生成、邮件发送、校验逻辑部署在后端/云函数侧,禁止在前端处理敏感逻辑,避免被恶意刷取邮件、暴力破解OTP。OTP有效期建议设置为5分钟,单用户发送OTP的频率要做限流。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:45:03