2017-09-04 141 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)