Python social auth и drf social oauth

Мне нужна помощь сообщества.

В моем Django-проекте с django-rest-framework мы используем JWT-аутентификацию и хотим реализовать социальный логин от google. Поэтому я установил и настроил drf-social-oauth2 с бэкендом google-oath2 в проекте, как показано в документах.

settings.py

INSTALLED_APPS = [
    ...
    "social_django",
    "oauth2_provider",
    "drf_social_oauth2",
    ...
]

...

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                ...
                'social_django.context_processors.backends',
                'social_django.context_processors.login_redirect',
                ...
            ],
        },
    }
]

REST_FRAMEWORK = {
    ...
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        "oauth2_provider.contrib.rest_framework.OAuth2Authentication",
        "drf_social_oauth2.authentication.SocialAuthentication",
    ),
}

AUTHENTICATION_BACKENDS = (
    "django.contrib.auth.backends.ModelBackend",
    "drf_social_oauth2.backends.DjangoOAuth2",
    "social_core.backends.google.GoogleOAuth2",
)

SOCIAL_AUTH_REQUIRE_POST = True
ACTIVATE_JWT = True

SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = [
    "https://www.googleapis.com/auth/userinfo.email",
    "https://www.googleapis.com/auth/userinfo.profile",
]


SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = env(
    "SOCIAL_AUTH_GOOGLE_OAUTH2_KEY", default="SOCIAL_AUTH_GOOGLE_OAUTH2_KEY"
)
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = env(
    "SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET", default="SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET"
)

urls.py

urlpatterns = [
    ...
    path("", include("social_django.urls", namespace="social")),
    path("auth/", include("drf_social_oauth2.urls", namespace="drf")),
]

А теперь сам вопрос. Как реализовать перенаправление с необходимыми данными после авторизации пользователя на внешнем ресурсе?

У меня есть точка входа пользователя с перенаправлением на авторизацию в google

    path(
        "sign_in/google",
        views.AuthViewSet.as_view({"post": "sign_in_google"}),
        name="sign_in_google",
    ),

метод

    @extend_schema(request=None, responses={302: None})
    def sign_in_google(self, request, *args, **kwargs):
        strategy = load_strategy(request)
        backend = load_backend(
            strategy=strategy,
            name="google-oauth2",
            redirect_uri=f"{self.request.scheme}://{self.request.get_host()}/complete/google-oauth2/",
        )
        return do_auth(backend, REDIRECT_FIELD_NAME)

Если следовать нашим требованиям, нам нужно, чтобы пользователь был перенаправлен на страницу google-oauth2 и вошел в систему с учетными данными, а также чтобы наше приложение получило доступ к данным и создало пользователя. Это достигается с помощью http://localhost:8000/sign_in/google API перенаправляет на http://localhost:8000/complete/google-oauth2/ с необходимыми параметрами и социальный пользователь с django пользователь создан и перенаправляет на LOGIN_REDIRECT_URL с аутентификацией сессии. Эта часть работает и пользователь создан успешно.

Перенаправление работает нормально. Обратное перенаправление с созданием пользователя тоже работает нормально. Но как мне отправить данные в api из документации, чтобы получить токен авторизации на сервере? (У нас нет сеансовой авторизации).

Прошу вашей помощи, чтобы понять процесс, я много читал и смотрел учебники, но не получил того, что ожидал.

Если вам нужна какая-либо деталь, пожалуйста, спросите.

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