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

Firebase认证后周期禁用用户及注册默认禁用功能实现咨询

账号管控功能实现方案

一、注册时默认禁用账号

Firebase Auth 本身不内置自定义账号状态字段,你需要搭配Firebase的Firestore/Realtime Database存储用户的额外状态信息,修改你的注册逻辑如下:

  • 账号创建成功后,同步向数据库写入用户的唯一UID、注册时间戳、禁用状态三个核心字段,默认disabled字段设为True
  • 后续登录逻辑中增加状态校验,只要disabled为True就拒绝登录请求

修改后的注册代码示例:

import time
import requests
import json

def register(self, screen):
    email = screen.email.text()
    password = screen.password.text()
    confirmpass = screen.confirmpass.text()
    if password == confirmpass:
        try:
            # 创建Firebase Auth账号
            user = self.auth.create_user_with_email_and_password(email, password)
            uid = user['localId']
            # 同步写入用户状态到数据库,此处以Realtime Database为例
            user_data = {
                "email": email,
                "register_timestamp": int(time.time()), # 秒级时间戳
                "disabled": True # 默认禁用
            }
            self.db.child("users").child(uid).set(user_data, user['idToken'])
            self.msg_error_registro(screen, msg="注册成功,账号待激活", bgcolor="background-color:rgb(85, 255, 127);")
            screen.email.setText("")
            screen.password.setText("")
            screen.confirmpass.setText("")
        except requests.exceptions.HTTPError as httpErr:
            self.error_message = json.loads(httpErr.args[1])['error']['message']

二、注册满7天自动停用账号

推荐两种实现方式,可根据需求选择:

方案1:登录时实时校验(客户端即可实现,无需额外服务)

在登录逻辑中增加时间校验步骤,用户发起登录请求时:

  1. 从数据库读取对应用户的register_timestamp和disabled状态
  2. 计算当前时间与注册时间的差值,超过7天(604800秒)则将disabled字段更新为True,拒绝登录
  3. 未超过7天则正常校验密码后放行

示例登录逻辑片段:

def login(self, screen):
    email = screen.login_email.text()
    password = screen.login_password.text()
    try:
        user = self.auth.sign_in_with_email_and_password(email, password)
        uid = user['localId']
        # 读取用户状态
        user_info = self.db.child("users").child(uid).get(user['idToken']).val()
        current_ts = int(time.time())
        # 校验是否满7天
        if current_ts - user_info['register_timestamp'] >= 7*24*3600:
            # 更新为禁用状态
            self.db.child("users").child(uid).update({"disabled": True}, user['idToken'])
            self.msg_error_registro(screen, msg="账号已到期", bgcolor="background-color:rgb(255, 85, 85);")
            return
        # 校验是否被禁用
        if user_info['disabled']:
            self.msg_error_registro(screen, msg="账号已被禁用", bgcolor="background-color:rgb(255, 85, 85);")
            return
        # 校验通过跳转到主页面
        self.goto_main_screen()
    except requests.exceptions.HTTPError as httpErr:
        self.error_message = json.loads(httpErr.args[1])['error']['message']

方案2:服务端定时扫描(更精准,用户不登录也能自动禁用)

使用Firebase Cloud Functions写定时触发任务,每天扫描所有用户的注册时间,将注册满7天的用户disabled字段批量更新为True即可,无需修改客户端逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:45:05