Flask应用报错AttributeError: 'Auth'对象无'get_user'属性求助
解决Flask中Firebase Auth的AttributeError: 'Auth' object has no attribute 'get_user'错误
错误根源
firebase_admin.auth.get_user()方法的作用是通过用户UID获取用户详情,并非直接接收前端传来的session cookie值。你直接将cookie中的session值传入该方法,既参数类型错误,也混淆了token验证与用户查询的流程。- 代码中
url_for('/admin/login')写法错误,url_for需要传入视图函数名,而非路由路径。
修正方案
核心流程
- 从cookie中取出Firebase生成的ID Token(需确认前端存储的cookie键名,通常是
idToken,而非session) - 验证ID Token的有效性,解码后获取用户UID
- (可选)通过UID调用
get_user()获取完整用户记录 - 处理token无效/过期的异常情况
修正后的代码
from firebase_admin import auth from firebase_admin.exceptions import InvalidIdTokenError, ExpiredIdTokenError from flask import redirect, url_for, render_template, request @app.route("/admin/dashboard") def admin_dashboard(): # 从cookie获取ID Token,根据前端实际存储的键名调整 id_token = request.cookies.get("session") if not id_token: # 替换为你的登录视图函数名 return redirect(url_for("admin_login")) try: # 验证并解码ID Token decoded_token = auth.verify_id_token(id_token) user_uid = decoded_token["uid"] # 可选:获取完整用户信息 current_user = auth.get_user(user_uid) except (InvalidIdTokenError, ExpiredIdTokenError): # Token无效或过期,重定向到登录页 return redirect(url_for("admin_login")) return render_template("admin/dashboard.html", user=current_user)
额外注意事项
- 确认前端登录后,正确将Firebase的ID Token存入cookie,键名要与后端获取逻辑一致。
url_for的参数必须是视图函数的名称,比如登录路由对应的函数是def admin_login(): ...,就用url_for("admin_login")。- 必须捕获token验证相关的异常,避免程序因无效token崩溃。
内容的提问来源于stack exchange,提问作者Sandip Parajuli
相关产品推荐
相关产品推荐

