예제 #1
0
    def validate(self, attrs):
        if 'allauth' in settings.INSTALLED_APPS:
            from allauth.account.forms import default_token_generator
            from allauth.account.utils import url_str_to_user_pk as uid_decoder
        else:
            from django.contrib.auth.tokens import default_token_generator
            from django.utils.http import urlsafe_base64_decode as uid_decoder

        # Decode the uidb64 (allauth use base36) to uid to get User object
        try:
            uid = force_str(uid_decoder(attrs['uid']))
            self.user = UserModel._default_manager.get(pk=uid)
        except (TypeError, ValueError, OverflowError, UserModel.DoesNotExist):
            raise ValidationError({'uid': ['Invalid value']})

        if not default_token_generator.check_token(self.user, attrs['token']):
            raise ValidationError({'token': ['Invalid value']})

        self.custom_validation(attrs)
        # Construct SetPasswordForm instance
        self.set_password_form = self.set_password_form_class(
            user=self.user, data=attrs,
        )
        if not self.set_password_form.is_valid():
            raise serializers.ValidationError(self.set_password_form.errors)

        return attrs
예제 #2
0
 def dispatch(self, request, uidb36, key, **kwargs):
     self.request = request
     self.key = key
     self.reset_user = self._get_user(uidb36)
     if self.reset_user is None:
         return redirect('account-password-reset-fail')
     token = default_token_generator.check_token(self.reset_user, key)
     if not token:
         return redirect('account-password-reset-fail')
     ret = super().dispatch(request, uidb36, key, **kwargs)
     return ret
 def validate(self, attrs):
     self._errors = {}
     # Decode the uidb64 to uid to get User object
     try:
         uid = url_str_to_user_pk(attrs['uid'])
         self.user = User._default_manager.get(pk=uid)
     except (TypeError, ValueError, OverflowError, User.DoesNotExist):
         raise ValidationError({'uid': ['Invalid value']})
     self.custom_validation(attrs)
     # Construct SetPasswordForm instance
     self.set_password_form = self.set_password_form_class(user=self.user,
                                                           data=attrs)
     if not self.set_password_form.is_valid():
         raise ValidationError(self.set_password_form.errors)
     if not default_token_generator.check_token(self.user, attrs['token']):
         raise ValidationError({'token': ['Invalid value']})
     return attrs
예제 #4
0
    def validate(self, attrs):

        # Decode the uidb64 (allauth use base36) to uid to get User object
        try:
            uid = force_str(uid_decoder(attrs['uid']))
            self.user = UserModel._default_manager.get(pk=uid)
        except (TypeError, ValueError, OverflowError, UserModel.DoesNotExist):
            raise ValidationError({'uid': ['Invalid value']})

        if not default_token_generator.check_token(self.user, attrs['token']):
            raise ValidationError({'token': ['Invalid value']})

        self.custom_validation(attrs)
        # Construct SetPasswordForm instance
        self.set_password_form = self.set_password_form_class(
            user=self.user, data=attrs,
        )
        if not self.set_password_form.is_valid():
            raise serializers.ValidationError(self.set_password_form.errors)

        return attrs