I have a fastapi app connected to my firebase firestore. I am writing a simple endpoint to check if the current user has an admin role or not?
I have written the following code for the endpoint
@router.get("/isAdmin")
def is_admin(email: 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()
user_ref = db.collection("users").where("email", "==", email).get()
# 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[0].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").where("email", "==", email)
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": "You do not have an admin role", "hasAdminRole": False},
)
For any email ID, whether it's an admin or not, I get the following response.
{
"message": "User does not exist"
}
The above response is very weird because I am not even writing the above message as a response anywhere and I don't know if this a fastapi swagger issue.
The endpoint I am hitting is - http://127.0.0.1:8000/users/isAdmin?email=test%40test.com
source https://stackoverflow.com/questions/76001795/python-fastapi-giving-incorrect-responses
Comments
Post a Comment