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:登录时实时校验(客户端即可实现,无需额外服务)
在登录逻辑中增加时间校验步骤,用户发起登录请求时:
- 从数据库读取对应用户的
register_timestamp和disabled状态 - 计算当前时间与注册时间的差值,超过7天(604800秒)则将
disabled字段更新为True,拒绝登录 - 未超过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
相关产品推荐
相关产品推荐

