def username_field(self): User = utils.get_user_model() try: return User.USERNAME_FIELD except AttributeError: return 'username'
def validate(self, attrs): User = utils.get_user_model() token = attrs['token'] # Check payload valid (based off of JSONWebTokenAuthentication, # may want to refactor) try: payload = jwt_decode_handler(token) except jwt.ExpiredSignature: msg = 'Signature has expired.' raise serializers.ValidationError(msg) except jwt.DecodeError: msg = 'Error decoding signature.' raise serializers.ValidationError(msg) # Make sure user exists (may want to refactor this) try: user_id = jwt_get_user_id_from_payload(payload) if user_id is not None: user = User.objects.get(pk=user_id, is_active=True) else: msg = 'Invalid payload' raise serializers.ValidationError(msg) except User.DoesNotExist: msg = "User doesn't exist" raise serializers.ValidationError(msg) # Get and check 'orig_iat' orig_iat = payload.get('orig_iat') if orig_iat: # Verify expiration refresh_limit = api_settings.JWT_REFRESH_EXPIRATION_DELTA if isinstance(refresh_limit, timedelta): refresh_limit = (refresh_limit.days * 24 * 3600 + refresh_limit.seconds) expiration_timestamp = orig_iat + int(refresh_limit) now_timestamp = timegm(datetime.utcnow().utctimetuple()) if now_timestamp > expiration_timestamp: msg = 'Refresh has expired' raise serializers.ValidationError(msg) else: msg = 'orig_iat field is required' raise serializers.ValidationError(msg) new_payload = jwt_payload_handler(user) new_payload['orig_iat'] = orig_iat return { 'token': jwt_encode_handler(new_payload) }
def validate(self, attrs): User = utils.get_user_model() token = attrs['token'] # Check payload valid (based off of JSONWebTokenAuthentication, # may want to refactor) try: payload = jwt_decode_handler(token) except jwt.ExpiredSignature: msg = 'Signature has expired.' raise serializers.ValidationError(msg) except jwt.DecodeError: msg = 'Error decoding signature.' raise serializers.ValidationError(msg) # Make sure user exists (may want to refactor this) try: user_id = jwt_get_user_id_from_payload(payload) if user_id: user = User.objects.get(pk=user_id, is_active=True) else: msg = 'Invalid payload' raise serializers.ValidationError(msg) except User.DoesNotExist: msg = "User doesn't exist" raise serializers.ValidationError(msg) # Get and check 'orig_iat' orig_iat = payload.get('orig_iat') if orig_iat: # Verify expiration refresh_limit = api_settings.JWT_REFRESH_EXPIRATION_DELTA if isinstance(refresh_limit, timedelta): refresh_limit = (refresh_limit.days * 24 * 3600 + refresh_limit.seconds) expiration_timestamp = orig_iat + int(refresh_limit) now_timestamp = timegm(datetime.utcnow().utctimetuple()) if now_timestamp > expiration_timestamp: msg = 'Refresh has expired' raise serializers.ValidationError(msg) else: msg = 'orig_iat field is required' raise serializers.ValidationError(msg) new_payload = jwt_payload_handler(user) new_payload['orig_iat'] = orig_iat return {'token': jwt_encode_handler(new_payload)}
def validate(self, token): User = utils.get_user_model() if not token: raise serializers.ValidationError(msg) else: user = User.objects.get(username='******', is_active=True) payload = jwt_payload_handler(user) if api_settings.JWT_ALLOW_REFRESH: payload['orig_iat'] = timegm( datetime.utcnow().utctimetuple() ) return { 'token': jwt_encode_handler(payload), 'user': user }
def _check_user(self, payload): User = utils.get_user_model() # Make sure user exists (may want to refactor this) try: user_id = jwt_get_user_id_from_payload(payload) if user_id is not None: user = User.objects.get(pk=user_id, is_active=True) else: msg = _('Invalid payload.') raise serializers.ValidationError(msg) except User.DoesNotExist: msg = _("User doesn't exist.") raise serializers.ValidationError(msg) return user
def authenticate_credentials(self, payload): """ Returns an active user that matches the payload's user id and email. """ User = utils.get_user_model() user_id = jwt_get_user_id_from_payload(payload) if user_id is not None: try: user = User.objects.get(pk=user_id, is_active=True) except User.DoesNotExist: msg = _('Invalid signature.') raise exceptions.AuthenticationFailed(msg) else: msg = _('Invalid payload.') raise exceptions.AuthenticationFailed(msg) return user
def validate(self, attrs): self._errors = {} # Get the UserModel UserModel = get_user_model() # Decode the uidb64 to uid to get User object try: uid = uid_decoder(attrs['uid']) self.user = UserModel._default_manager.get(pk=uid) except (TypeError, ValueError, OverflowError, UserModel.DoesNotExist): self._errors['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(): self._errors['token'] = ['Invalid value'] if not default_token_generator.check_token(self.user, attrs['token']): self._errors['token'] = ['Invalid value']
class Meta: model = get_user_model() fields = ('id', 'username', 'password', 'email', 'first_name', 'last_name', 'UserMoreinfo')