Я пытаюсь реализовать проверку подлинности google oauth2 в своем приложении django. Я выполнил все шаги в соответствии с docs.
В адресной строке браузера, если я просматриваю этот https://foo.bar.net/api/v1/auth/login/google-oauth2/
этот URL-адрес, он правильно аутентифицируется google и возвращает токен google-auth к указанному URL-адресу перенаправления, и он извлекает токен аутентификации и преобразует его в обычный токен, который затем отправляется пользователю или интерфейсу в формате json.
Но если я попытался сделать запрос GET на вышеупомянутый url из моего js-кода, он показывает
Reason: CORS header 'Access-Control-Allow-Origin' missing
Полная трассировка на интерфейсе выглядит следующим образом:
GET https://foo.bar.net/api/v1/auth/login/google-oauth2/ 302 Found 718ms
polyfil...ndle.js (line 7507)
GET https://accounts.google.com/o/oauth2/auth?client_...DW&response_type=code&scope=openid+email+profile 200 OK
Login Failed Response { _body=Event error, status=0, ok=false, more...}
main.bundle.js (line 367)
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://accounts.google.com/o/oauth2/auth?client_id=kguygvh868697-khgkhvkgvkgkgv.apps.googleusercontent.com&redirect_uri=https://foo.bar.net/api/v1/auth/complete/google-oauth2/&state=Cbms1QhSQVzjO3xkjhkyuu&response_type=code&scope=openid+email+profile. (Reason: CORS header 'Access-Control-Allow-Origin' missing).
Я искал google, который предлагает мне установить djang-CORS-headers. Я установил и настроил вышеуказанный пакет. Но та же ошибка появляется.
Часть моего settings.py
выглядит,
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'oauth2_provider.middleware.OAuth2TokenMiddleware',
]
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'oauth2_provider',
'corsheaders',
'rest_framework_swagger',
]
CORS_ORIGIN_ALLOW_ALL = True
На самом деле у нас есть два отдельных проекта как для frontend (ang), так и для backend (django). Я согласен с проблемой ajax. Так что я заставил URL-адрес google oauth открываться в отдельном окне.
В бэкэнд я сделал до получения токена доступа к серверу и обменял его с токеном доступа к приложениям. В настоящее время я возвращаю данные маркера в формате json. Таким образом, этот json будет отображаться во вновь открывшемся окне. Но не знаю, как
-
получить токен из окна и сохранить его в временном хранилище в браузере.
-
закройте новое окно после появления деталей.
-
перенаправить на страницу пользователей/профиля, передав информацию маркера в заголовок запроса.
Не знаю, правилен ли этот поток oauth или нет. И также я не хочу, чтобы полный поток oauth находился в js-части (oauth implicit flow). Pls направит меня в правильном направлении.