Authentication¶
User registration¶
The default setup for Weblate is to use python-social-auth for handling new users. This allows them to register using form on the website and after confirming their email they can contribute or by using some third party service to authenticate.
You can also completely disable new users registration using
REGISTRATION_OPEN
.
Rate limiting¶
Добавлено в версии 2.14.
The password based authentication is subject to rate limiting. At most
AUTH_MAX_ATTEMPTS
attempts are allowed within
AUTH_CHECK_WINDOW
seconds. The user is then blocked
for AUTH_LOCKOUT_TIME
.
If there are more than AUTH_LOCK_ATTEMPTS
failed authentication
attempts on one account, this account password authentication is disabled and
it’s not possible to login until user asks for password reset.
IP address for rate limiting¶
The rate limiting is based on client IP address. This is obtained from HTTP headers and you will have to change configuration in case Weblate is running behind reverse proxy to work it properly.
Authentication backends¶
By default Weblate uses Django built-in authentication and includes various social authentication options. Thanks to using Django authentication, you can also import user database from other Django based projects (see Migrating from Pootle).
Django can be additionally configured to authenticate against other means as well.
LDAP authentication¶
LDAP authentication can be best achieved using django-auth-ldap package. You can install it by usual means:
# Using PyPI
pip install django-auth-ldap
# Using apt-get
apt-get install python-django-auth-ldap
Once you have the package installed, you can hook it to Django authentication:
# Add LDAP backed, keep Django one if you want to be able to login
# even without LDAP for admin account
AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend',
'weblate.accounts.auth.WeblateUserBackend',
)
# LDAP server address
AUTH_LDAP_SERVER_URI = 'ldaps://ldap.example.net'
# DN to use for authentication
AUTH_LDAP_USER_DN_TEMPLATE = 'cn=%(user)s,o=Example'
# Depending on your LDAP server, you might use different DN
# like:
# AUTH_LDAP_USER_DN_TEMPLATE = 'ou=users,dc=example,dc=com'
# List of attributes to import from LDAP on login
# Weblate stores full user name in the first_name attribute
AUTH_LDAP_USER_ATTR_MAP = {
'first_name': 'name',
'email': 'mail',
}
См.также
CAS authentication¶
CAS authentication can be achieved using a package such as django-cas-ng.
Step one is disclosing the email field of the user via CAS. This has to be configured on the CAS server itself and requires you run at least CAS v2 since CAS v1 doesn’t support attributes at all.
Step two is updating Weblate to use your CAS server and attributes.
To install django-cas-ng:
pip install django-cas-ng
Once you have the package installed you can hook it up to the Django
authentication system by modifying the settings.py
file:
# Add CAS backed, keep Django one if you want to be able to login
# even without LDAP for admin account
AUTHENTICATION_BACKENDS = (
'django_cas_ng.backends.CASBackend',
'weblate.accounts.auth.WeblateUserBackend',
)
# CAS server address
CAS_SERVER_URL = 'https://cas.example.net/cas/'
# Add django_cas_ng somewhere in the list of INSTALLED_APPS
INSTALLED_APPS = (
...,
'django_cas_ng'
)
Finally, a signal can be used to map the email field to the user object. For this to work you have to import the signal from the django-cas-ng package and connect your code with this signal. Doing this inside your settings file can cause problems, therefore it’s suggested to put it:
- in your app config’s
django.apps.AppConfig.ready()
method (Django 1.7 and higher) - at the end of your
models.py
file (Django 1.6 and lower) - in the project’s
urls.py
file (when no models exist)
from django_cas_ng.signals import cas_user_authenticated
from django.dispatch import receiver
@receiver(cas_user_authenticated)
def update_user_email_address(sender, user=None, attributes=None, **kwargs):
# If your CAS server does not always include the email attribute
# you can wrap the next two lines of code in a try/catch block.
user.email = attributes['email']
user.save()
См.также
Social authentication¶
Thanks to python-social-auth, Weblate support authentication using many third party services such as Facebook, GitHub, Google or Bitbucket.
Please check their documentation for generic configuration instructions in Django Framework.
Примечание
By default, Weblate relies on third-party authentication services to provide validated email address, in case some of services you want to use do not support this, please remove
social_core.pipeline.social_auth.associate_by_email
fromSOCIAL_AUTH_PIPELINE
settings.Enabling individual backends is quite easy, it’s just a matter of adding entry to
AUTHENTICATION_BACKENDS
setting and possibly adding keys needed for given authentication. Please note that some backends do not provide user email by default, you have to request it explicitly, otherwise Weblate will not be able to properly credit users contributions.OpenID authentication¶
For OpenID based services it’s usually just a matter of enabling them. Following section enables OpenID authentication for OpenSUSE, Fedora and Ubuntu:
GitHub authentication¶
You need to register application on GitHub and then tell Weblate all the secrets:
См.также
Python Social Auth backend
Bitbucket authentication¶
You need to register application on Bitbucket and then tell Weblate all the secrets:
См.также
Python Social Auth backend
Google OAuth2¶
For using Google OAuth2, you need to register application on <https://console.developers.google.com/> and enable Google+ API.
The redirect URL is
https://WEBLATE SERVER/accounts/complete/google-oauth2/
Facebook OAuth2¶
As usual with OAuth2 services, you need to register your application with Facebook. Once this is done, you can configure Weblate to use it:
Gitlab OAuth2¶
For using Gitlab OAuth2, you need to register application on <https://gitlab.com/profile/applications>.
The redirect URL is
https://WEBLATE SERVER/accounts/complete/gitlab/
and ensure to mark the read_user scope.