stages/prompt: fix username field throwing error with existing user (#9342)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
@ -150,22 +150,26 @@ class PromptChallengeResponse(ChallengeResponse):
|
|||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
def username_field_validator_factory() -> Callable[[PromptChallenge, str], Any]:
|
def username_field_validator_factory() -> Callable[[PromptChallengeResponse, str], Any]:
|
||||||
"""Return a `clean_` method for `field`. Clean method checks if username is taken already."""
|
"""Return a `clean_` method for `field`. Clean method checks if username is taken already."""
|
||||||
|
|
||||||
def username_field_validator(_: PromptChallenge, value: str) -> Any:
|
def username_field_validator(self: PromptChallengeResponse, value: str) -> Any:
|
||||||
"""Check for duplicate usernames"""
|
"""Check for duplicate usernames"""
|
||||||
if User.objects.filter(username=value).exists():
|
pending_user = self.stage.get_pending_user()
|
||||||
|
query = User.objects.all()
|
||||||
|
if pending_user.pk:
|
||||||
|
query = query.exclude(username=pending_user.username)
|
||||||
|
if query.filter(username=value).exists():
|
||||||
raise ValidationError("Username is already taken.")
|
raise ValidationError("Username is already taken.")
|
||||||
return value
|
return value
|
||||||
|
|
||||||
return username_field_validator
|
return username_field_validator
|
||||||
|
|
||||||
|
|
||||||
def password_single_validator_factory() -> Callable[[PromptChallenge, str], Any]:
|
def password_single_validator_factory() -> Callable[[PromptChallengeResponse, str], Any]:
|
||||||
"""Return a `clean_` method for `field`. Clean method checks if username is taken already."""
|
"""Return a `clean_` method for `field`. Clean method checks if username is taken already."""
|
||||||
|
|
||||||
def password_single_clean(self: PromptChallenge, value: str) -> Any:
|
def password_single_clean(self: PromptChallengeResponse, value: str) -> Any:
|
||||||
"""Send password validation signals for e.g. LDAP Source"""
|
"""Send password validation signals for e.g. LDAP Source"""
|
||||||
password_validate.send(sender=self, password=value, plan_context=self.plan.context)
|
password_validate.send(sender=self, password=value, plan_context=self.plan.context)
|
||||||
return value
|
return value
|
||||||
|
@ -16,7 +16,7 @@ entries:
|
|||||||
placeholder: Username
|
placeholder: Username
|
||||||
placeholder_expression: false
|
placeholder_expression: false
|
||||||
required: true
|
required: true
|
||||||
type: text
|
type: username
|
||||||
field_key: username
|
field_key: username
|
||||||
label: Username
|
label: Username
|
||||||
identifiers:
|
identifiers:
|
||||||
|
Reference in New Issue
Block a user