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

Python中Firebase Admin SDK读取数据库异常,如何解决?

问题:无法读取Firebase实时数据库中的用户密码

使用db.reference('credentials/login/' + logged_username)无法获取到用户密码,打印该变量得到的是<firebase_admin.db.Reference object at 0x103a7d190>而非预期的密码值,代码如下:

import firebase_admin
from firebase_admin import credentials
from firebase_admin import db

cred = credentials.Certificate('ServKey.json')

logged = input("are you logged in (True / False)")

firebase_admin.initialize_app(cred, {
    'databaseURL' : 'https://chatat-73f4a-default-rtdb.europe-west1.firebasedatabase.app/'
})

ref = db.reference('credentials/')

if logged == "False" :
    register_username = input("What do you want your username to be ? ")
    register_password = input("What do you want your password to be ? ")

login_ref = ref.child('login')
def setlogin() : 
    login_ref.set({
    register_username : {
    'Password' : register_password,     
    }
    })

if logged == "False":    
    setlogin()
    print("ouisir")
      
if logged == "True" :
    logged_username = input("What is your username ? ")
    logged_password = input("What is your password ? ")
    check_password = db.reference('credentials/login/' + logged_username)
    
if check_password == logged_password :
        logged_in = True

print(check_password)
问题原因与修复方案

核心问题

db.reference()仅返回数据库节点的引用对象,不会自动获取数据,必须调用.get()方法才能读取对应节点的实际内容。此外代码还存在作用域和数据结构处理的问题。

具体修复步骤

  • 读取数据需调用.get():db.reference()只是指向节点的指针,要拿到数据必须调用.get(),同时要根据存储的字典结构提取Password字段。
  • 修正变量作用域:将密码验证逻辑缩进在logged == "True"分支内,避免未进入登录流程时check_password未定义导致报错。
  • 处理空数据情况:如果查询的用户名不存在,.get()会返回None,需提前判空防止后续报错。

修复后的完整代码

import firebase_admin
from firebase_admin import credentials
from firebase_admin import db

cred = credentials.Certificate('ServKey.json')

logged = input("are you logged in (True / False)")

firebase_admin.initialize_app(cred, {
    'databaseURL' : 'https://chatat-73f4a-default-rtdb.europe-west1.firebasedatabase.app/'
})

ref = db.reference('credentials/')

if logged == "False" :
    register_username = input("What do you want your username to be ? ")
    register_password = input("What do you want your password to be ? ")

login_ref = ref.child('login')
def setlogin() : 
    login_ref.set({
        register_username : {
            'Password' : register_password,     
        }
    })

if logged == "False":    
    setlogin()
    print("ouisir")
      
if logged == "True" :
    logged_username = input("What is your username ? ")
    logged_password = input("What is your password ? ")
    # 获取用户数据并提取密码字段
    user_data = db.reference('credentials/login/' + logged_username).get()
    check_password = user_data.get('Password') if user_data else None
    
    if check_password == logged_password :
        logged_in = True
        print("登录成功")
    else:
        print("用户名或密码错误")

print(check_password)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:53:30