Django
Django и социальные сети
Поиск…
параметры
настройка | Есть ли |
---|---|
Некоторые конфигурации | Удобные базовые настройки, которые идут с Django-Allauth (которые я использую большую часть времени). Дополнительные параметры конфигурации см. В разделе Конфигурации |
ACCOUNT_AUTHENTICATION_METHOD (= «имя пользователя» или «электронная почта» или «имя_пользователя») | Задает метод входа в систему - вводит ли пользователь вход, введя свое имя пользователя, адрес электронной почты или любой из них. Для этого для «email» требуется ACCOUNT_EMAIL_REQUIRED = True |
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS (= 3) | Определяет дату истечения срока действия писем с подтверждением электронной почты (количество дней). |
ACCOUNT_EMAIL_REQUIRED (= False) | Пользователь должен передать адрес электронной почты при регистрации. Это происходит в тандеме с настройкой ACCOUNT_AUTHENTICATION_METHOD |
ACCOUNT_EMAIL_VERIFICATION (= "опционально") | Определяет метод проверки электронной почты во время регистрации - выберите один из «обязательный», «необязательный» или «none». Если установлено «обязательное», пользователь блокируется от входа в систему до тех пор, пока не будет проверен адрес электронной почты. Выберите «optional» или «none», чтобы разрешить логины с непроверенным адресом электронной почты. В случае «факультативного» почта электронной почты по-прежнему отправляется, тогда как в случае «ни одного» письма с проверкой электронной почты не отправляются. |
ACCOUNT_LOGIN_ATTEMPTS_LIMIT (= 5) | Количество неудачных попыток входа в систему. Когда это число превышено, пользователю запрещается входить в систему для указанных ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT секунд. Хотя это защищает просмотр входа allauth, он не защищает логин администратора Django от принудительного принуждения. |
ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE (= False) | Определяет, будет ли пользователь автоматически выходить из системы после изменения или установки своего пароля. |
SOCIALACCOUNT_PROVIDERS (= dict) | Словарь, содержащий настройки конкретного поставщика. |
Простой способ: python-social-auth
python-social-auth - это структура, упрощающая механизм социальной аутентификации и авторизации. Он содержит множество социальных бэкэндов (Facebook, Twitter, Github, LinkedIn и т. Д.)
УСТАНОВИТЬ
Сначала нам нужно установить пакет python-social-auth с
pip install python-social-auth
или загрузить код из github. Теперь самое время добавить это в файл requirements.txt
.
НАСТРОЙКА settings.py
В settings.py добавьте:
INSTALLED_APPS = (
...
'social.apps.django_app.default',
...
)
КОНФИГУРИРОВАНИЕ РЕЗЕРВОВ
AUTHENTICATION_BACKENDS содержит бэкэнды, которые мы будем использовать, и нам нужно только поставить то, что нам нужно.
AUTHENTICATION_BACKENDS = (
'social.backends.open_id.OpenIdAuth',
'social.backends.google.GoogleOpenId',
'social.backends.google.GoogleOAuth2',
'social.backends.google.GoogleOAuth',
'social.backends.twitter.TwitterOAuth',
'social.backends.yahoo.YahooOpenId',
...
'django.contrib.auth.backends.ModelBackend',
)
Возможно, у вашего проекта settings.py
еще нет поля AUTHENTICATION_BACKENDS
. Если это так, добавьте это поле. Не забудьте пропустить 'django.contrib.auth.backends.ModelBackend',
поскольку он обрабатывает логин по имени пользователя / паролю.
Если мы используем, например, Facebook и Linkedin Backends, нам нужно добавить ключи API
SOCIAL_AUTH_FACEBOOK_KEY = 'YOURFACEBOOKKEY'
SOCIAL_AUTH_FACEBOOK_SECRET = 'YOURFACEBOOKSECRET'
а также
SOCIAL_AUTH_LINKEDIN_KEY = 'YOURLINKEDINKEY'
SOCIAL_AUTH_LINKEDIN_SECRET = 'YOURLINKEDINSECRET'
Примечание . Вы можете получить закрытые ключи в разработчиках Facebook и разработчиках Linkedin, и здесь вы можете увидеть полный список и его соответствующий способ узнать ключ API и ключ Secret.
Примечание по секретным ключам: секретные ключи должны храниться в секрете. Ниже приведено описание переполнения стека, которое полезно. Этот учебник полезен для изучения переменных среды.
TEMPLATE_CONTEXT_PROCESSORS помогут переадресации, backend и другие вещи, но в начале нам нужны только эти:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
...
)
В Django 1.8 настройка TEMPLATE_CONTEXT_PREPROCESSORS
как показано выше, устарела. Если это так, вы добавите его внутри TEMPLATES
dict. Ваш взгляд должен выглядеть примерно так:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [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',
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
],
},
},
]
ИСПОЛЬЗОВАНИЕ ТАМОЖЕННОГО ПОЛЬЗОВАТЕЛЯ
Если вы используете пользовательскую модель пользователя и хотите присоединиться к ней, просто добавьте следующую строку (все еще в settings.py )
SOCIAL_AUTH_USER_MODEL = 'somepackage.models.CustomUser'
CustomUser
- это модель, наследующая или абстрактная от пользователя по умолчанию.
КОНФИГУРАЦИЯ urls.py
# if you haven't imported inlcude make sure you do so at the top of your file
from django.conf.urls import url, include
urlpatterns = patterns('',
...
url('', include('social.apps.django_app.urls', namespace='social'))
...
)
Затем необходимо синхронизировать базу данных для создания необходимых моделей:
./manage.py migrate
Наконец мы можем играть!
в каком-то шаблоне вам нужно добавить что-то вроде этого:
<a href="{% url 'social:begin' 'facebook' %}?next={{ request.path }}">Login with Facebook</a>
<a href="{% url 'social:begin' 'linkedin' %}?next={{ request.path }}">Login with Linkedin</a>
если вы используете другой бэкэнд, просто измените «facebook» на имя бэкэнда.
Запуск пользователей
После того, как вы зарегистрировали пользователей, вы, скорее всего, захотите создать функциональность для их регистрации. В некоторых шаблонах, вероятно, рядом с тем, где был показан шаблон журнала, добавьте следующий тег:
<a href="{% url 'logout' %}">Logout</a>
или же
<a href="/logout">Logout</a>
Вы захотите отредактировать файл urls.py
с кодом, похожим на:
url(r'^logout/$', views.logout, name='logout'),
Наконец, отредактируйте файл views.py с кодом, похожим на:
def logout(request):
auth_logout(request)
return redirect('/')
Использование Django Allauth
Для всех моих проектов Django-Allauth оставался тем, который легко настраивается, и выходит из коробки со многими функциями, включая, но не ограничиваясь:
- Примерно 50+ аутентификации социальных сетей
- Смешать регистрацию как локальных, так и социальных учетных записей
- Несколько социальных счетов
- Необязательная мгновенная регистрация для социальных учетных записей - без вопросов
- Управление адресами электронной почты (несколько адресов электронной почты, настройка первичного)
- Потерянный поток потока поток проверки адреса электронной почты
Если вы заинтересованы в загрязнении рук, Django-Allauth убирается с пути, с дополнительными настройками, чтобы настроить процесс и использовать вашу систему аутентификации.
Следующие шаги предполагают, что вы используете Django 1.10+
Шаги настройки:
pip install django-allauth
В файле settings.py
внесите следующие изменения:
# Specify the context processors as follows:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
# Already defined Django-related contexts here
# `allauth` needs this from django. It is there by default,
# unless you've devilishly taken it away.
'django.template.context_processors.request',
],
},
},
]
AUTHENTICATION_BACKENDS = (
# Needed to login by username in Django admin, regardless of `allauth`
'django.contrib.auth.backends.ModelBackend',
# `allauth` specific authentication methods, such as login by e-mail
'allauth.account.auth_backends.AuthenticationBackend',
)
INSTALLED_APPS = (
# Up here is all your default installed apps from Django
# The following apps are required:
'django.contrib.auth',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
# include the providers you want to enable:
'allauth.socialaccount.providers.google',
'allauth.socialaccount.providers.facebook',
)
# Don't forget this little dude.
SITE_ID = 1
urls.py
изменения в файле settings.py
выше, перейдите в файл urls.py
Это может быть ваш yourapp/urls.py
или ваш ProjectName/urls.py
Обычно я предпочитаю ProjectName/urls.py
urlpatterns = [
# other urls here
url(r'^accounts/', include('allauth.urls')),
# other urls here
]
Просто добавив include('allauth.urls')
, вы получите эти URL бесплатно:
^accounts/ ^ ^signup/$ [name='account_signup']
^accounts/ ^ ^login/$ [name='account_login']
^accounts/ ^ ^logout/$ [name='account_logout']
^accounts/ ^ ^password/change/$ [name='account_change_password']
^accounts/ ^ ^password/set/$ [name='account_set_password']
^accounts/ ^ ^inactive/$ [name='account_inactive']
^accounts/ ^ ^email/$ [name='account_email']
^accounts/ ^ ^confirm-email/$ [name='account_email_verification_sent']
^accounts/ ^ ^confirm-email/(?P<key>[-:\w]+)/$ [name='account_confirm_email']
^accounts/ ^ ^password/reset/$ [name='account_reset_password']
^accounts/ ^ ^password/reset/done/$ [name='account_reset_password_done']
^accounts/ ^ ^password/reset/key/(?P<uidb36>[0-9A-Za-z]+)-(?P<key>.+)/$ [name='account_reset_password_from_key']
^accounts/ ^ ^password/reset/key/done/$ [name='account_reset_password_from_key_done']
^accounts/ ^social/
^accounts/ ^google/
^accounts/ ^twitter/
^accounts/ ^facebook/
^accounts/ ^facebook/login/token/$ [name='facebook_login_by_token']
Наконец, выполните python ./manage.py migrate
чтобы python ./manage.py migrate
Django-allauth в базу данных.
Как обычно, чтобы иметь возможность войти в ваше приложение с помощью какой-либо социальной сети, которую вы добавили, вам нужно будет добавить информацию о социальной учетной записи в сети.
Войдите в администратор Django ( localhost:8000/admin
) и в разделе « Social Applications
чтобы добавить информацию о своей социальной учетной записи.
Для получения подробной информации о заполнении в разделах «Социальные приложения» вам могут потребоваться учетные записи у каждого поставщика авторизации.
Подробные сведения о том, что вы можете иметь и настроить, см. На странице «Конфигурации» .