Рубрики
Без рубрики

Джанго Аллаут Полный гид Django-Allauth

От нуля до героя гид для самой популярной библиотеки аутентификации Джанго. С тегом Python, Django, WebDev, новичков.

Регистрация и аутентификация пользователя являются одним из наиболее важных компонентов веб -приложения. Это учебное пособие имеет дело с настройкой, конфигурацией и настройкой Django-Allauth, а также расширенными настройками и настройкой социального входа для вашего веб-приложения Django. Этот урок намерен служить руководством для новых пользователей, которые хотят быстро начать с Django-Allauth и внести полезные настройки на этом пути без большой боли.

Почему это руководство?

Django-Allauth очень хорошо написанная библиотека благодаря Раймонд Пеннерс Анкет Тем не менее, это может быть ошеломляющим для Django начинающие или продвинутые пользователи, использующие Django-Allauth в первый раз. Хотя это хорошо задокументировано, из-за времени и ограничений ресурсов вовлеченных разработчиков не было много статей и подробных учебных пособий по библиотеке. Таким образом, этот урок пытается решить эту проблему, создав всеобъемлющее руководство, чтобы быстро начать, а также узнать о передовой настройке.

Базовая настройка

Вы можете Скачать Файлы, используемые в учебном пособии, чтобы получить старт. Шаги ниже направляют вас подробно через настройку.

  1. Создайте проект Django, если у вас его уже нет.

  2. Установить Django-Allauth Используя команду PIP установить Django-Allauth

Добавить, allauthallauth.account , allauth.socialaccount и все функции социального входа, которые вам нужны Insted_apps раздел в настройки.py Анкет

Вы можете просмотреть весь список поддерживаемых API Здесь Анкет

Функция социального входа описана позже в посте. Вы можете прокрутить вниз до этого подзаголоса, если хотите просто прочитать это. После того, как вы настроили раздел «Установленные приложения», он должен быть аналогичен коду, приведенному ниже.

INSTALLED_APPS = [
    'django.contrib.admin',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.google',
    'allauth.socialaccount.providers.facebook',
    'django.contrib.auth',
    'django.contrib.sites',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Настройте Шаблон Настройки процессора контекста в настройки.py а также добавьте шаблон URL в проекте urls.py Анкет

TEMPLATES = [
  {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.normpath(os.path.join(BASE_DIR, 'templates')),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.request',
            ],
        },
    },
]

Добавьте следующий бэкэнд аутентификации.

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
)

Скопируйте файлы шаблонов из Django-Allauth Репозиторий или вы также можете использовать мой Пользовательский репозиторий (Я сделал некоторые модификации и несколько хороших структурирования) и вставлю его в папку Шаблоны в вашем каталоге проекта.

Добавьте URL -адреса Allauth в urls.py вашего основного каталога проекта. После добавления URL -адресов Allauth файл URL -адреса должен выглядеть похоже на

from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^accounts/', include('allauth.urls')),
]

Вы также можете добавить пользовательский CSS самостоятельно или мои CSS (хорошо прокомментировано и задокументировано, но просты), которые я создал во время использования шаблонов Allauth. Он включает в себя стиль почти для всех страниц и даже мобильные шаблоны электронной почты для подтверждения и сброса пароля. Вы можете сделать это, создав Статический Папка в каталоге проекта и размещение CSS в папке учетные записи .

Запустить Python Manage.py Makemigrations и Python Manage.py Migrate Чтобы сделать все необходимые миграции и запустить питон Manage.py Runserver Чтобы запустить сервер Django.

Следите за шаблонами URL, чтобы отобразить регистрационную форму. Например, : Посетите Localhost: 8000/Accounts/Login Чтобы отобразить страницу входа в систему.

Основная конфигурация

Большинство Django-Allauth Функции можно настроить с использованием встроенных адаптеров и переменных, поместив их в файл настройки.py Анкет Хотя Документация Имеет тонны таких вариантов с хорошими объяснениями, я выделил несколько важных ниже.

Экспонирование по электронной почте истечение : Устанавливает количество дней, в течение которых учетная запись должна быть активирована.

Например, : Account_email_confirmation_expire_days = 7

Электронная почта требуется для активации : Эта опция позволяет установить, следует ли проверить адрес электронной почты для регистрации. Установите false, чтобы отключить требование по электронной почте.

Например, : Account_email_required

Проверка электронной почты учетной записи : Эта опция может быть использована для установки того, необходима ли проверка электронной почты для пользователя входа в систему после регистрации учетной записи. Вы можете использовать «обязательный», чтобы заблокировать пользователя от входа в систему, пока электронная почта не будет проверена. Вы можете установить параметры для отправки электронной почты, но позволить пользователю войти в систему без электронной почты. Вы также можете установить ни одного, чтобы не отправлять электронное письмо с проверкой. (Не рекомендуется)

Например, : Account_email_verification

Предел попытки входа в систему : Это важная функция, которая может быть использована для предотвращения атаки грубой силы на странице входа в систему пользователя на вашем веб -сайте. Можно установить максимальное количество попыток входа в систему, и пользователь заблокирован от входа в систему до тайм -аута. Эта функция использует Account_login_attempts_timeout параметр.

Например, : Account_login_attempts_limit

Вход в систему ограничение тайм -аута : Эта настройка должна использоваться с настройкой Account_login_attempts_limit . Набор значений находится в секундах от последней неудачной попытки входа в систему. Обратите внимание, что это не защищает администратор.

Например, : Account_login_attempts_timeout # 1 день в секундах

Вход и вход в систему перенаправление URL : Когда пользователь входит в систему или входит в систему, вы можете перенаправить пользователя на конкретный URL -адрес или страницу, а настройки ниже можно использовать для установки этого URL. По умолчанию Allauth перенаправляет вход в /учетные записи/профиль/ URL и выход на Localhost: 8000 или любая домашняя страница Localhost.

Например, : Account_logout_redirect_url Например, : Login_redirect_url

Когда вы закончите, ваши настройки Allauth должны выглядеть похожи на приведенные ниже настройки.

ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS =1
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
ACCOUNT_LOGIN_ATTEMPTS_LIMIT = 5
ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT = 86400 # 1 day in seconds
ACCOUNT_LOGOUT_REDIRECT_URL ='/accounts/login/'
LOGIN_REDIRECT_URL = '/accounts/email/' # default to /accounts/profile 

Расширение класса Django-Alluth и расширенных настройки

В этом разделе рассматривается настройка форм регистрации Django-Allauth, вмешиваясь в регистрационный поток, чтобы добавить собственный собственный процесс и проверки.

Одним из наиболее распространенных запросов о Allauth является добавление дополнительных полей или пользовательских полей в форму регистрации. Вы можете расширить Регистрация класс из allauth.account.forms Анкет Все, что вам нужно сделать, это создать пользовательский класс, пропустите Регистрация в пользовательский класс и определите пользовательские поля и сохраните его. Очень важно вернуть пользовательский объект, поскольку он будет передаваться другим модулям для проверки. Вы также должны включить переменные Account_forms в настройки.py Анкет

Давайте увидим это, используя пример. В forms.py Анкет

from allauth.account.forms import SignupForm
from django import forms

class CustomSignupForm(SignupForm):
    first_name = forms.CharField(max_length=30, label='First Name')
    last_name = forms.CharField(max_length=30, label='Last Name')
    def signup(self, request, user):
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.save()
        return user

В приведенном выше фрагменте CustomSignupform это расширенный класс, который наследует все особенности Регистрация класс и добавляет необходимые функции. Здесь пользовательские поля по имени First_name и фамилия создаются и сохраняются при использовании модуля регистрации в том же классе.

Account_forms в настройки.py Для приведенного выше кода является

ACCOUNT_FORMS = {
'signup': 'YourProject.forms.CustomSignupForm',
}

Любые другие созданные пользовательские формы могут быть расширены в Account_forms Анкет Список проиллюстрирован в Документация Анкет

Точно так же Логинформа Пользовательская форма Addemailform и другие могут быть расширены. Однако помните, что когда вы расширяете эти формы и связываете их в настройки.py Анкет Не забудьте передать исходную форму (например, подписаться ) в качестве параметра в ваш класс, и иногда вам, возможно, придется обрабатывать пользовательские проверки и возвращать пользователя или какое -то другое значение. Пожалуйста, обратитесь к исходный код Чтобы следовать правильному потоку.

Пользовательское вмешательство и пользовательские проверки

Недавно я столкнулся с некоторыми хорошими вопросами о переполнении стека и в разделе выпуска репозитория в отношении добавления пользовательских подтверждений и вмешательства в поток регистрации пользователя. При исследовании решения и сканированием с помощью документации я нашел DefaultAccountApter Очень полезно и действительно может использоваться для решения большинства задач настройки, с которыми пользователь может столкнуться, используя Django-Allauth Анкет Я воспроизводит ответы и с некоторыми инструкциями ниже.

Пример 1: Разрешить ограниченный список электронных писем

После выяснения способа хранения и извлечения ограниченного списка вы можете использовать адаптеры и выразить ошибку проверки в регистрационной форме, когда ограниченное электронное письмо пытается зарегистрироваться. Расширить DefaultAccountApter и переопределить clean_email метод Создать adapter.py В вашем каталоге проекта и расширяйте класс адаптера по умолчанию. Вы также можете ограничить поставщиков электронной почты (например, временные поставщики электронной почты) регистрацией с использованием регулярных выражений. Я не буду освещать идентификацию по электронной почте ( user@provider.com ), как это выходит за рамки этой статьи. Но поток остается прежним.

from allauth.account.adapter import DefaultAccountAdapter
from django.forms import ValidationError

class RestrictEmailAdapter(DefaultAccountAdapter):
    def clean_email(self,email):
        RestrictedList = ['Your restricted list goes here.']
        if email in RestrictedList
            raise ValidationError('You are restricted from registering. Please contact admin.')
        return email

Наконец, укажите адаптер аккаунта в настройки.py файл в ваш расширенный класс. Account_Adapter

Пример 2: Добавьте максимальную длину в имя пользователя

Как Account_username_max_length не существует в библиотеке Allauth, DefaultAccountApter можно использовать для достижения этой функции без большой боли. Расширить DefaultAccountApter класс и переопределение clean_username метод Вам также нужно ссылаться clean_username Еще раз после пользовательской проверки для завершения других встроенных подтверждений Анкет

Примечание : Последнее предложение в приведенном выше абзаце является ключом к работе с DefaultAccountApter Анкет Вы никогда не должны забывать ссылку на исходное имя модуля для модуля, чтобы завершить другие проверки.

from allauth.account.adapter import DefaultAccountAdapter
from django.forms import ValidationError

class UsernameMaxAdapter(DefaultAccountAdapter):
    def clean_username(self, username):
        if len(username) > 'Your Max Size':
            raise ValidationError('Please enter a username value less than the current one')
        return DefaultAccountAdapter.clean_username(self,username) # For other default validations.

Наконец, укажите на подкласс в вашем настройки.py Account_Adapter

Вы можете обратиться к Adapters.py Файл В исходном коде и расширяйте другие модули и добавьте процессор, чтобы изменить его поток. Модули, такие как opulate_username , clean_password (Который может быть настроен для ограничения широко используемых паролей) может иметь пользовательский процесс и поток, не переписывая их.

DefaultAccountApter Может быть мощным инструментом, если используется в правильных обстоятельствах для вмешательства в процесс по умолчанию Аллаута. Allauth поставляется с огромным разнообразием встроенных настроек, и их все можно просмотреть Здесь Анкет Вы также можете загрузить весь исходный код по ссылке в ссылках.

Настройка социального входа в систему с использованием django-allauth

Добавление необходимых приложений:

Как показано в документации Allauth-Documentation, и в предыдущем разделе мы должны добавить необходимые приложения, связанные с входами в систему, которые мы будем использовать. Этот раздел демонстрирует использование конфигурации Google API с использованием allauth.socialaccount.providers.google и конфигурация API Facebook с использованием allauth.socialaccount.providers.facebook Анкет Вам нужно добавить их в Insted_apps Анкет

После того, как вы это сделаете, ваши установленные приложения должны выглядеть как,

INSTALLED_APPS = [
    'django.contrib.admin',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.google',
    'allauth.socialaccount.providers.facebook',
    'django.contrib.auth',
    'django.contrib.sites',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Установить Socialaccount_query_email = Account_email_required В Socialaccount_email_required = account_email_required и Socialaccount_store_tokens = false . Если требуется, и вы можете прочитать больше об этих настройках здесь. Мы также настроим некоторые настройки для Facebook и Google под Socialaccount_providers Анкет В информации о настройках см. Документацию Здесь Анкет

Ваш Socialaccount_providers Настройки должны выглядеть похожи на,

SOCIALACCOUNT_PROVIDERS = {
    'facebook': {
        'METHOD': 'oauth2',
        'SCOPE': ['email', 'public_profile', 'user_friends'],
        'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
        'INIT_PARAMS': {'cookie': True},
        'FIELDS': [
            'id',
            'email',
            'name',
            'first_name',
            'last_name',
            'verified',
            'locale',
            'timezone',
            'link',
            'gender',
            'updated_time',
        ],
        'EXCHANGE_TOKEN': True,
        'LOCALE_FUNC': 'path.to.callable',
        'VERIFIED_EMAIL': False,
        'VERSION': 'v2.12',
    },
     'google': {
        'SCOPE': [
            'profile',
            'email',
        ],
        'AUTH_PARAMS': {
            'access_type': 'online',
        }
    }
}

Запустить Python Manage.py Make MakeMigrations и Python Manage.py Migrate Для создания записей базы данных. Теперь мы можем создать ключи Facebook и Google API. Я кратко описал процесс ниже. Я рекомендую вам следовать инструкциям на их соответствующих официальных веб -сайтах, поскольку их услуги и политики подвергаются изменению.

Создание и конфигурация API:

Следуйте приведенным ниже шагам и ищите дополнительных судей или учебных пособий о том, как сделать это в Интернете. Краткое описание ниже.

Facebook

  1. Создайте тестовое приложение, посетив Developers.facebook.com и заполнив все детали.

  2. Скопируйте идентификатор приложения и секретный ключ.

Google

  1. Создайте API входа в систему и скопируйте секретные учетные данные.
  2. Не забудьте разместить правильный URL -адрес обратного вызова при создании API. Место http://localhost: 8000/accounts/google/login/callback/ в обратном вызове URL.
Конфигурация администратора
  1. Создайте суперпользователь (администратор), выполняя Python Manage.py CreateSuperuser и заполните детали.
  2. Перейти к http://localhost: 8000/admin и войдите в консоли администратора.
  3. Перейдите на сайт и измените Пример.com к http://localhost: 8000 как в доменном имени, так и на отображении имени.
  4. Теперь перейдите в социальные приложения, добавьте социальные приложения и заполните подробности.
  5. Повторите то же самое для Facebook и Google.

Вы настроены и сделаны. Теперь вы можете продолжить и использовать Facebook и Google Logins.

Это один из первых самых полных постов на Dev.to. Не стесняйтесь отправлять объятия или ошибки.

Ссылки и дальнейшее чтение:

  1. Django-Allauth Github Page
  2. Официальная документация Джанго-Аллаут
  3. Мои пользовательские шаблоны и CSS
  4. Поток переполнения стека на примере 1
  5. Поток переполнения стека на примере 2
  6. Файл adapters.py в исходном коде
  7. Facebook API и Google API Документация All-Auth.
  8. Полный исходный код для руководства

Оригинал: “https://dev.to/gajesh/the-complete-django-allauth-guide-la3”