fix non standard implementation of __getattr__ #675
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
According to the the docs, a
__getattr__magic method should either return a value for the requested attribute name, or raiseAttributeError.A
__getattr__method was added to theTokenUserclass that allows accessing keys on the token as if they were attributes of theTokenUserclass. In the current implementation, if the requested attribute name is not a key in thetokendictionary, thenNoneis returned instead of raisingAttributeError.When Django's auth backend
ModelBackenddoes permission checks on a user object, it first checks for an attribute named_perm_cachewithhasattr, then builds the cache if it doesn't exist. Sincehasattrincorrectly returnsTruefor aTokenUserinstance, the cache (which would have resolved to an empty set) is never created. This ultimately results in aTypeErrorbecauseNoneis not Iterable.