Использование 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.

Кроме того, вот несколько полезных ссылок:

  1. gmail scopes, которые вы можете запросить.
  2. gmail api endpoints.
  3. здесь есть более подробная документация по gmail api endpoints.
  4. готовые клиенты для различных языков программирования, в частности для 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.

Кроме того, вот несколько полезных ссылок:

  1. gmail scopes, которые вы можете запросить.
  2. gmail api endpoints.
  3. здесь есть более подробная документация по gmail api endpoints.
  4. готовые клиенты для различных языков программирования, в частности для python.

Это пример, не для производства, так как я писал выше, что многие вещи сильно упрощены, однако он должен дать вам некоторое представление и множество ссылок, включая готовые решения. Надеюсь, это будет полезно для вас.

Вернуться на верх