Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Modify ObtainAuthToken to use the User model's USERNAME_FIELD and password for authentication instead of assuming username and password.#9674

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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Open
partho-debnath wants to merge1 commit intoencode:master
base:master
Choose a base branch
Loading
frompartho-debnath:fix/token-auth-username-or-email-login

Conversation

partho-debnath
Copy link

Summary

Django’s default user model usesusername andpassword for authentication. However, when a custom user model is defined withUSERNAME_FIELD = 'email', Django correctly uses email and password for authentication.

The issue was thatDjango REST Framework'sobtain_auth_token endpoint (used for TokenAuthentication) still expectedusername andpassword, even when a custom user model usedemail instead ofusername.

Fix

This update modifies theObtainAuthToken view to dynamically useUSERNAME_FIELD instead of assumingusername. Now, authentication works consistently, whether using the built-in User model or a custom one, with no inconsistencies.

Changes Made:

  1. ObtainAuthToken now retrieves theUSERNAME_FIELD from the user model.
  2. It authenticates usingUSERNAME_FIELD andpassword, ensuring compatibility with both built-in and custom user models.

Impact

  1. Users with a custom User model (e.g.,USERNAME_FIELD = 'email') can now log in usingemail andpassword instead ofusername andpassword.
  2. Users with thedefault User model or acustom User model whereUSERNAME_FIELD = 'username' can continue logging in usingusername andpassword as expected.

…password' instead of 'username' and 'password' for both the built-in and custom User models
@partho-debnath
Copy link
Author

If any changes are required, please let me know.

@browniebroke
Copy link
Member

I'm not sure this falls under ourcurrent maintenance policy:

At this point in its lifespan we consider Django REST framework to be feature-complete. We focus on pull requests that track the continued development of Django versions, and generally do not accept new features or code formatting changes.

One could argue that this improves compatibility with custom Django user models, but on the other handUSERNAME_FIELD has been in Django for so long that it's a bit late to add this now...

It's also simple to customise in user-land right now, and this is explained in our docs.

If we were to ever accept it, we would need some tests to cover the behaviour with a customised user model...

@partho-debnath
Copy link
Author

partho-debnath commentedMar 31, 2025
edited
Loading

Thank you for reviewing my pull request and for your feedback. I understand that Django REST Framework is considered feature-complete and that new features are usually only accepted if they align with Django’s ongoing development.

However, I see this change as more of a compatibility improvement rather than a new feature. WhileUSERNAME_FIELD has been in Django for a long time,ObtainAuthToken still assumes ausername by default. This creates aninconsistency for projects that take advantage of Django’s built-in flexibility forcustom user models.

@browniebroke, Are you saying that it won't be possible to accept or merge this change?

Copy link
Member

@auvipyauvipy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

I think this might break existing projects or functionalities

Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@auvipyauvipyauvipy requested changes

At least 1 approving review is required to merge this pull request.

Assignees
No one assigned
Labels
None yet
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

3 participants
@partho-debnath@browniebroke@auvipy

[8]ページ先頭

©2009-2025 Movatter.jp