Когда веб-сайты просят нас войти на их веб-сайт, чтобы воспользоваться их услугами, многие из нас устают от заполнения учетных данных? В настоящее время большинство веб-приложений интегрировали социальную аутентификацию в свою систему, не запрашивая у пользователя лишние учетные данные. И, конечно же, социальная аутентификация имеет много важных преимуществ и со стороны разработчиков.
На рисунке отображено будущее поведение регистрации с точки зрения пользователя сайта:
Социальный вход использует информацию с сайтов социальных сетей, таких как Google или Facebook, чтобы упростить и упростить процесс регистрации/входа в сторонние приложения.
Мы собираемся реализовать аутентификацию Google и GitHub, используя библиотеку social-auth-app-django.
Прежде всего, давайте сначала установим эту библиотеку, чтобы использовать предоставляемые ею услуги:
pip install social-auth-app-django
Установите приложение в модуле settings.py:
INSTALLED_APPS = [
# ...
'social_django',
]
Примените миграции, чтобы Django создал необходимые модели, связанные с social_django приложением:
python manage.py makemigrations
python manage.py migrate
Хорошо, все хорошо. Теперь нам нужно добавить серверы аутентификации в настройки. Мы до сих пор мы использовали систему аутентификации по умолчанию, которая поставляется с Django. Но чаще всего нам может понадобиться использовать другие источники аутентификации пользователя.
Django отслеживает список серверов аутентификации. Затем он использует эти серверные части для аутентификации пользователя. Этот список определен в settings.py в разделе AUTHENTICATION_BACKENDS.
Давайте определим правильные серверные части, которые нам нужны для нашего приложения. Полный список поддерживаемых сайтов, вы можете посмотреть по этой ссылке.
Я буду использовать механизмы аутентификации Google и Github, так что пока добавим их:
AUTHENTICATION_BACKENDS = (
'social_core.backends.github.GithubOAuth2',
'social_core.backends.google.GoogleOAuth2',
'django.contrib.auth.backends.ModelBackend',
)
django.contrib.auth.backends.ModelBackend - это базовая серверная часть аутентификации, которая по умолчанию входит в Django, чтобы позволить пользователям входить в систему по методу имени пользователя/пароля. Те, что выше, - это серверные части Google и GitHub, которые можно использовать в нашем приложении для социальной аутентификации.
Теперь внутри settings.py перейдите в TEMPLATES список и добавьте следующее в context_processors:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [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',
# new code
'social_django.context_processors.backends',
'social_django.context_processors.login_redirect',
],
},
},
]
Всякий раз, когда шаблон отображается с запросом, также возвращается контекст. Представьте, что мы создаем приложение, в котором мы должны включать одни и те же данные в каждое создаваемое представление. Это сложно и подвержено ошибкам. Здесь в игру вступают процессоры контекста.
context_processors содержит список путей к вызываемым объектам, которые возвращают словарь для объединения с контекстом каждого представления, избавляя нас от необходимости добавлять одни и те же данные снова и снова.
Хорошо, давайте перейдем к следующей части, которая обновляет модуль mysite/urls.py проекта, чтобы включить URL-адреса приложения социальной аутентификации:
from django.urls import re_path
urlpatterns = [
# .....
re_path(r'^oauth/', include('social_django.urls', namespace='social')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
На этом почти все, чтобы запустить это, следующим шагом будет регистрация нашего приложения в Google и Github.
Аутентификация на Гитхабе
Шаг 1: Войдите в свою учетную запись GitHub.
Шаг 2: Перейдите в Settings -> Developer settings -> OAuth Apps -> New OAuth App.
Homepage URL - http://127.0.0.1:8000/
Authorization callback URL - http://127.0.0.1:8000/oauth/complete/github/
За исключением URL-адреса обратного вызова авторизации, вы можете заполнить остальную информацию по своему усмотрению. URL-адрес обратного вызова для авторизации — самая важная часть настройки вашего приложения OAuth.
После заполнения информации вам будет предоставлен уникальный идентификатор клиента и секрет клиента. В следующей части мы увидим, как сохранить эти ключи в безопасности с помощью python-dotenv, а пока, поскольку основной темой этого шага является социальная аутентификация, давайте сосредоточимся на ней.
Добавим в settings.py следующий код:
# social auth configs for github
SOCIAL_AUTH_GITHUB_KEY = 'YOUR GITHUB KEY'
SOCIAL_AUTH_GITHUB_SECRET = 'YOUR GITHUB SECRET KEY'
Теперь давайте добавим в наш шаблон login.html следующий код:
<a href="{% url 'social:begin' 'github' %}">Log In with GitHub</a>
Вот и все, теперь вы можете войти на сайт, используя свою учетную запись Github. Давайте проверим.
Перейдем по адресу http://127.0.0.1:8000/accounts/login/:
Нажмем Log In with GitHub, и нас переадресует на страницу авторизации GitHub:
В моем случае, после ввода логина и пароля, мы увидим сообщение об удачной авторизации:
И мы перейдем обратно на наш сайт, где уже будем авторизованы:
Давайте перейдем в профиль и заполним его:
Как мы видим, при социальной аутентификацию, наши профили тоже прекрасно работают. Перейдем в админ панель и посмотрим:
При авторизации через социальные сети, у нас автоматически добавился новый User и добавился его профиль: