如何使用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
相关产品推荐
相关产品推荐

