2017-09-04 144 views
2

我有我的django-rest-server TokenAuthentification。 注册后login完美地工作,但是当我用旧字段调用更新时,我无法再登录(无法使用提供的凭证登录)作为响应。我究竟做错了什么?Django无法登录后登录

更新代码:

class ClientSerializer(serializers.ModelSerializer): 
    username = serializers.CharField(source='user.username') 
    first_name = serializers.CharField(source='user.first_name') 
    last_name = serializers.CharField(source='user.last_name') 
    email = serializers.CharField(source='user.email') 
    password = serializers.CharField(source='user.password') 
    profile_photo = serializers.ImageField(source='details_sample.profile_photo', required=False) 

    class Meta: 
     model = Client 
     fields = ('id', 'username', 'first_name', 'last_name', 'email', 'password', 'profile_photo', 'phone') 

    def update(self, instance, validated_data): 

     if validated_data.get('user') is not None: 
      instance.user.set_password(validated_data['user'].get('password', instance.user.password)) 
      instance.username = validated_data['user'].get('username', instance.user.password) 
      instance.first_name = validated_data['user'].get('first_name', instance.user.password) 
      instance.last_name = validated_data['user'].get('last_name', instance.user.password) 
      instance.user.save() 

     instance.phone = validated_data.get('phone', instance.phone) 

     instance.save() 
     return instance 

登录网址:

url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), 

令牌创建:

@receiver(post_init, sender=settings.AUTH_USER_MODEL) 
def create_auth_token(sender, instance=None, created=False, **kwargs): 
    if created: 
     Token.objects.create(user=instance) 
+0

你是什么意思不能再登录了? –

+1

@ArpitSolanki补充说。 “无法使用提供的凭据登录。”作为回应。但用户名和密码确实无误。 –

回答

3

我觉得你的麻烦在这里:

instance.user.set_password(validated_data['user'].get('password', instance.user.password)) 
#                 ^^^^^ 

试图替换:

password = validated_data['user'].get('password', None) 
if password: 
     instance.user.set_password(password)