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 из документации, чтобы получить токен авторизации на сервере? (У нас нет сеансовой авторизации).
Прошу вашей помощи, чтобы понять процесс, я много читал и смотрел учебники, но не получил того, что ожидал.
Если вам нужна какая-либо деталь, пожалуйста, спросите.