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

如何使用Firebase Auth SDK实现邮箱密码匹配的用户登录功能

核心说明

Firebase Admin SDK 是面向后端的特权SDK,设计上不提供明文密码校验、用户登录的直接接口,这类凭证校验逻辑官方默认要求在客户端完成,后端仅负责验证客户端登录后获取的ID令牌有效性。

可行实现方案

方案1:官方推荐标准流程(客户端登录+后端验权)

该方案是Firebase Auth的标准使用流程,安全性更高:

  • 客户端(前端/移动端)集成 Firebase 客户端 Auth SDK,调用 signInWithEmailAndPassword(email, password) 方法完成登录,登录成功后获取到Firebase颁发的ID令牌(ID Token)
  • 客户端请求你的后端接口时,在请求头中携带该ID令牌
  • 后端通过Admin SDK提供的令牌校验方法验证身份,校验通过后返回对应用户信息即可

后端校验示例代码:

from firebase_admin import auth

def get_user_info_by_token(id_token):
    try:
        # 校验ID令牌真实性,check_revoked参数可按需开启,用于检查令牌是否已被吊销
        decoded_token = auth.verify_id_token(id_token, check_revoked=True)
        user_uid = decoded_token["uid"]
        # 可额外调用get_user接口获取更完整的用户属性
        user_info = auth.get_user(user_uid)
        return {
            "uid": user_info.uid,
            "email": user_info.email,
            "display_name": user_info.display_name,
            "email_verified": user_info.email_verified
        }
    except auth.InvalidIdTokenError:
        return {"error": "无效登录凭证"}
    except auth.ExpiredIdTokenError:
        return {"error": "登录凭证已过期,请重新登录"}
    except auth.RevokedIdTokenError:
        return {"error": "登录凭证已失效,请重新登录"}

方案2:后端直接校验邮箱密码(特殊场景使用)

如果你确实无法在客户端集成Firebase SDK,必须由后端直接接收邮箱密码完成校验,可以调用Firebase Auth的公开REST接口实现,需要先从Firebase控制台的项目设置页获取你的项目Web API密钥:

import requests

def login_with_email_password(email, password, firebase_web_api_key):
    api_url = f"https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key={firebase_web_api_key}"
    request_data = {
        "email": email,
        "password": password,
        "returnSecureToken": True
    }
    response = requests.post(api_url, json=request_data)
    if response.status_code == 200:
        result = response.json()
        return {
            "uid": result["localId"],
            "email": result["email"],
            "id_token": result["idToken"],
            "refresh_token": result["refreshToken"],
            "expires_in": result["expiresIn"]
        }
    else:
        error_msg = response.json().get("error", {}).get("message", "邮箱或密码错误")
        return {"error": error_msg}
注意事项
  • 方案2不是官方推荐的最佳实践,仅限无法使用客户端SDK的特殊场景使用
  • 妥善保管你的项目Web API密钥,避免泄露后被恶意调用
  • 不要在你的服务端存储用户明文密码,所有密码校验逻辑统一由Firebase侧完成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:45:04