python fastapi给出错误的响应



我有一个fastapi应用程序连接到我的firebase firestore。我正在编写一个简单的端点来检查当前用户是否具有管理员角色?

我为端点

编写了以下代码
@router.get("/isAdmin")
def is_admin(userId: str):  # sourcery skip: merge-nested-ifs
"""Enddpoint to check if the current user is an admin or not
Args:
email_id (str): email id of the user to be validated
"""
# Check if the user exists in our firestore database based on the email ID
db = firestore.client()
print(userId)
user_ref = db.collection("users").document(userId).get()
print(user_ref, userId)
# Check if the user exists and if the user has admin role
if user_ref:
# If the user exists, check if the user is an admin and return the roles if the user is an admin
if user_ref.to_dict()["hasAdminRole"]:
user_id = user_ref[0].id
user_roles_ref = (
db.collection("users").document(user_id).collection("roles")
)
user_roles_data = user_roles_ref.stream()
roles = {role.id: role.to_dict() for role in user_roles_data}
return {"hasAdminRole": True, "roles": roles}
# If the user doesn't exist or doesn't have admin role,
# check the tempAdmins collection to see if the user is a temporary admin
temp_admin_ref = db.collection("tempAdmins").document(userId).get()
temp_admin_data = temp_admin_ref.get()
if temp_admin_data:
# Get the documentID from the data
temp_admin_id = temp_admin_data[0].id
# Reference the roles document and get the data
temp_admin_roles_ref = (
db.collection("tempAdmins").document(temp_admin_id).collection("roles")
)
temp_admin_roles_data = temp_admin_roles_ref.stream()
roles = {role.id: role.to_dict() for role in temp_admin_roles_data}
return {"hasAdminRole": True, "roles": roles}
# return no access message if the user is not an admin
return JSONResponse(
status_code=response_status.HTTP_401_UNAUTHORIZED,
content={"message": NO_ADMIN_ACCESS_ERROR, "hasAdminRole": False},
)

对于任何电子邮件ID,无论它是否是管理员,我都会得到以下响应。

{
"message": "User does not exist"
}

上面的响应非常奇怪,因为我甚至没有把上面的消息作为响应写在任何地方,我不知道这是否是fastapi swagger问题。

我要到达的端点是-http://127.0.0.1:8000/users/isAdmin?email=test%40test.com

您应该使用路径参数将userId作为输入。可能rn您的userId值未定义或采用无效格式,导致admin SDK引发异常

,

@router.get("/isAdmin/{userId}")
def is_admin(userId: str):  # sourcery skip: merge-nested-ifs
"""Enddpoint to check if the current user is an admin or not
Args:
user_id (str): user id of the user to be validated
"""

使用端点作为http://127.0.0.1:8000/users/isAdmin/11111111-1111-1111-1111-111111111111


关于未知消息"未找到用户";

由SDK引发你可以考虑使用try, catch块来包围请求,因为admin sdk会在错误时引发异常,它们需要被捕获和管理。

相关内容

  • 没有找到相关文章

最新更新