Регистрация и аутентификация пользователя являются одним из наиболее важных компонентов веб -приложения. Это учебное пособие имеет дело с настройкой, конфигурацией и настройкой Django-Allauth, а также расширенными настройками и настройкой социального входа для вашего веб-приложения Django. Этот урок намерен служить руководством для новых пользователей, которые хотят быстро начать с Django-Allauth и внести полезные настройки на этом пути без большой боли.
Почему это руководство?
Django-Allauth
очень хорошо написанная библиотека благодаря Раймонд Пеннерс Анкет Тем не менее, это может быть ошеломляющим для Django
начинающие или продвинутые пользователи, использующие Django-Allauth
в первый раз. Хотя это хорошо задокументировано, из-за времени и ограничений ресурсов вовлеченных разработчиков не было много статей и подробных учебных пособий по библиотеке. Таким образом, этот урок пытается решить эту проблему, создав всеобъемлющее руководство, чтобы быстро начать, а также узнать о передовой настройке.
Базовая настройка
Вы можете Скачать Файлы, используемые в учебном пособии, чтобы получить старт. Шаги ниже направляют вас подробно через настройку.
Создайте проект Django, если у вас его уже нет.
Установить
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:
Следуйте приведенным ниже шагам и ищите дополнительных судей или учебных пособий о том, как сделать это в Интернете. Краткое описание ниже.
Создайте тестовое приложение, посетив Developers.facebook.com и заполнив все детали.
Скопируйте идентификатор приложения и секретный ключ.
- Создайте API входа в систему и скопируйте секретные учетные данные.
- Не забудьте разместить правильный URL -адрес обратного вызова при создании API. Место
http://localhost: 8000/accounts/google/login/callback/
в обратном вызове URL.
Конфигурация администратора
- Создайте суперпользователь (администратор), выполняя
Python Manage.py CreateSuperuser
и заполните детали. - Перейти к
http://localhost: 8000/admin
и войдите в консоли администратора. - Перейдите на сайт и измените
Пример.com
кhttp://localhost: 8000
как в доменном имени, так и на отображении имени. - Теперь перейдите в социальные приложения, добавьте социальные приложения и заполните подробности.
- Повторите то же самое для Facebook и Google.
Вы настроены и сделаны. Теперь вы можете продолжить и использовать Facebook и Google Logins.
Это один из первых самых полных постов на Dev.to. Не стесняйтесь отправлять объятия или ошибки.
Ссылки и дальнейшее чтение:
- Django-Allauth Github Page
- Официальная документация Джанго-Аллаут
- Мои пользовательские шаблоны и CSS
- Поток переполнения стека на примере 1
- Поток переполнения стека на примере 2
- Файл adapters.py в исходном коде
- Facebook API и Google API Документация All-Auth.
- Полный исходный код для руководства
Оригинал: “https://dev.to/gajesh/the-complete-django-allauth-guide-la3”