-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Resolver gets called twice #67
Comments
@geclick Sorry I didn't get notified of this issue on time. I am just seeing it now. I am currently looking into it at the moment |
@geclick the problem is the You can only solve this problem using pydantic model validator at mode='before'. Check the example below. class ModelAuthReadSchema(ModelSchema):
permissions: List[str] | None
class Meta:
model = AuthModel
fields = ['id', 'username', 'first_name', 'last_name', 'email']
@model_validator(mode="before")
def validate_permission_list(cls, values: DjangoGetter) -> typing.Any:
values = values._obj
if isinstance(values, dict):
# values will have ['id', 'username', 'first_name', 'last_name', 'email']
user = None # add functionality to get the user
permissions = get_permissions(user)
values.update(permissions=permissions)
return values |
tnks |
@geclick can you close this issue if the problem is resolved? |
I am adding a 'user' key to the token claims with the user data including its permissions. Following exactly this I get the tokens with no problem. But resolving the permissions raises a ValidationError, and I realized that the resolver gets called twice:
-first time the obj is a User instance and context is None, so no problem for getting the permission list
-the second time obj is not a User but a ModelAuthReadSchema instance and context is not None but its user is a AnonymousUser, and here comes the errors
this is my schema for User where AuthModel is just get_user_model()
get_permissions is a custom function for getting just business-related permissions
this is the error:
this would be the desired output:
The text was updated successfully, but these errors were encountered: