Использование Oauth2+Django для получения разрешения на доступ к Gmail пользователя
Я использовал этот учебник: https://www.geeksforgeeks.org/python-django-google-authentication-and-fetching-mails-from-scratch/. Однако библиотека oauth2client устарела и к ней не обращались почти 9 лет. Я искал различные руководства, но они, похоже, написаны искусственным интеллектом; в них нет никакого смысла, и они делают такие вещи, как говорят вам включить учетные данные в часть кода, которая не использует учетные данные.
Итак, мой вопрос заключается в том, как я могу реализовать oauth2 в моем Django-приложении, чтобы пользователь мог зайти на Django-сайт и дать разрешение на чтение своей электронной почты?
Я начну с самого начала и опишу минимально работающий пример без использования библиотек oauth2
. В этом руководстве для простоты намеренно опущена обработка ошибок и работа с безопасностью. Возможно, вы захотите попробовать использовать django-allauth
, для реализации google oauth2
аутентификации ознакомьтесь с документацией . Также советую прочитать этот документ, этот, а также этот и все настроить (если вы еще этого не сделали).
Для работы нам нужна какая-нибудь высокоуровневая библиотека python для выполнения http
запросов, например: request
или httpx
. В этом примере я буду использовать httpx
. Кроме того, поскольку мы будем работать с gmail.api
в тестовом режиме, вам необходимо добавить Test users
сюда , например, подойдет ваш gmail
аккаунт.
Вот минимальный рабочий пример, чтобы все заработало:
{#main_page.html#}
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form method="POST" action="{% url 'google_login' %}">
{% csrf_token %}
<button type="submit">GOOGLE</button>
</form>
</body>
</html>
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.main_page),
path('google-login/', views.google_login, name='google_login'),
path('google-callback/', views.google_callback),
]
Итак. По сути, в этом примере есть три конечные точки. Главная страница загружается HTML
, на ней есть кнопка GOOGLE
, нажатие на нее вызывает конечную точку google-login/
, которая перенаправляет пользователя для входа в систему через Google. После этого Google вызовет конечную точку google-callback/
, где, если все прошло гладко, вы получите code
, который обменяете на токен доступа, позволяющий вам делать аутентифицированные запросы от имени пользователя к api
google.
Кроме того, вот несколько полезных ссылок:
- gmail scopes, которые вы можете запросить.
- gmail api endpoints.
- здесь есть более подробная документация по gmail api endpoints.
- готовые клиенты для различных языков программирования, в частности для python.
Это пример, не для производства, так как я писал выше, что многие вещи сильно упрощены, однако он должен дать вам некоторое представление и множество ссылок, включая готовые решения. Надеюсь, это будет полезно для вас.
Я начну с самого начала и опишу минимально работающий пример без использования библиотек oauth2
. В этом руководстве для простоты намеренно опущена обработка ошибок и работа с безопасностью. Возможно, вы захотите попробовать использовать django-allauth
, для реализации google oauth2
аутентификации ознакомьтесь с документацией . Также советую прочитать этот документ, этот, а также этот и все настроить (если вы еще этого не сделали).
Для работы нам нужна какая-нибудь высокоуровневая библиотека python для выполнения http
запросов, например: request
или httpx
. В этом примере я буду использовать httpx
. Кроме того, поскольку мы будем работать с gmail.api
в тестовом режиме, вам необходимо добавить Test users
сюда , например, подойдет ваш gmail
аккаунт.
Вот минимальный рабочий пример, чтобы все заработало:
{#main_page.html#}
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form method="POST" action="{% url 'google_login' %}">
{% csrf_token %}
<button type="submit">GOOGLE</button>
</form>
</body>
</html>
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.main_page),
path('google-login/', views.google_login, name='google_login'),
path('google-callback/', views.google_callback),
]
Итак. По сути, в этом примере есть три конечные точки. Главная страница загружается HTML
, на ней есть кнопка GOOGLE
, нажатие на нее вызывает конечную точку google-login/
, которая перенаправляет пользователя для входа в систему через Google. После этого Google вызовет конечную точку google-callback/
, где, если все прошло гладко, вы получите code
, который обменяете на токен доступа, позволяющий вам делать аутентифицированные запросы от имени пользователя к api
google.
Кроме того, вот несколько полезных ссылок:
- gmail scopes, которые вы можете запросить.
- gmail api endpoints.
- здесь есть более подробная документация по gmail api endpoints.
- готовые клиенты для различных языков программирования, в частности для python.
Это пример, не для производства, так как я писал выше, что многие вещи сильно упрощены, однако он должен дать вам некоторое представление и множество ссылок, включая готовые решения. Надеюсь, это будет полезно для вас.