diff --git a/docs/changes.rst b/docs/changes.rst index 6797b7810424..9058b50a8a9c 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -8,6 +8,7 @@ Not yet released. **Improvements** * :ref:`subscriptions` now include strings which need updating. +* Improved compatibility with password managers. **Bug fixes** diff --git a/weblate/accounts/forms.py b/weblate/accounts/forms.py index 39203703df81..95c5237b96c6 100644 --- a/weblate/accounts/forms.py +++ b/weblate/accounts/forms.py @@ -85,11 +85,16 @@ def clean_email(self): class PasswordField(forms.CharField): """Password field.""" - def __init__(self, *args, **kwargs) -> None: - kwargs["widget"] = forms.PasswordInput(render_value=False) + def __init__(self, new_password: bool = False, **kwargs) -> None: + kwargs["widget"] = forms.PasswordInput( + attrs={ + "autocomplete": "new-password" if new_password else "current-password" + }, + render_value=False, + ) kwargs["max_length"] = 256 kwargs["strip"] = False - super().__init__(*args, **kwargs) + super().__init__(**kwargs) class UniqueUsernameField(UsernameField): @@ -465,8 +470,12 @@ class SetPasswordForm(DjangoSetPasswordForm): new_password1 = PasswordField( label=gettext_lazy("New password"), help_text=password_validation.password_validators_help_text_html(), + new_password=True, + ) + new_password2 = PasswordField( + label=gettext_lazy("New password confirmation"), + new_password=True, ) - new_password2 = PasswordField(label=gettext_lazy("New password confirmation")) @transaction.atomic def save(self, request, delete_session=False) -> None: