Django (using TokenAuthentication): “non_field_errors”: "Unable to log in with provided credentials?

前端 未结 2 1908
萌比男神i
萌比男神i 2021-01-21 05:17

I\'m using httpie to test my custom authentication.

http POST http://127.0.0.1:8000/api-token-auth/ username=\'username1\' password=\'Password123\'
相关标签:
2条回答
  • 2021-01-21 05:49

    If you search for the error string in the DRF code, you find this (in authtoken/serializers.py:

    from django.contrib.auth import authenticate
    ...
    
    if username and password:                                                                                                                                                                                                              
        user = authenticate(username=username, password=password)                                                                                                                                                                          
    
        if user:                                                                                                                                                                                                                           
            # From Django 1.10 onwards the `authenticate` call simply                                                                                                                                                                      
            # returns `None` for is_active=False users.                                                                                                                                                                                    
            # (Assuming the default `ModelBackend` authentication backend.)                                                                                                                                                                
            if not user.is_active:                                                                                                                                                                                                         
                msg = _('User account is disabled.')                                                                                                                                                                                       
                raise serializers.ValidationError(msg, code='authorization')
        else:                                                                                                                                                                                                                     
            msg = _('Unable to log in with provided credentials.')                                                                                                                                                                         
            raise serializers.ValidationError(msg, code='authorization')
    ...
    

    So it looks like depending on which version of Django you're using, either these credentials are incorrect, or the user is not active (for Django >= 1.10)?

    Have you tried logging in manually in the admin with these credentials to verify them?

    0 讨论(0)
  • 2021-01-21 05:52

    OK I solved it. Inside my settings, I just had to remove the AUTHENTICATIONS_BACKEND. I thought my custom backend was different for merely logging a user in and the token authentication backend worked to get that token.

    0 讨论(0)
提交回复
热议问题