HTTPError 403 (Запрещено) с Django и python-social-auth, подключающимся к Google с помощью OAuth2
Используя python-social-auth
, я получаю сообщение об ошибке 403: Forbiden
после принятия доступа из google
EDIT: Я недавно (2017) имел ту же ошибку, но под новым сообщением: 401 Client Error: Unauthorized for url: https://accounts.google.com/o/oauth2/token
Ответы
Ответ 1
Вам нужно добавить Google+ API
список разрешенных API-интерфейсов в консоли разработчика Google (под APIs
)
Примечание. Если вы хотите увидеть реальное сообщение об ошибке, используйте трассировку, чтобы посмотреть содержимое переменной response
(response.text
). Я использую werkzeug для этого (django-extensions
+ python manage.py runserver_plus
).
Ответ 2
Спасибо. Я использовал этот python-social-auth учебник по искусству и логике, но не смог пройти мимо 403: Запрещенный HTTPError в /complete/google -oauth2/пока не включите Google+ API, как указано выше , и подождите несколько минут, чтобы Google включил его.
Кроме того, мне пришлось разместить шаблоны в каталоге шаблонов и установить
TEMPLATE_DIRS = ('/path/to/psa_test/thirdauth/templates/',)
в settings.py.
Надеюсь, это поможет кому-то на этом пути. В общем, это заняло около 6 часов, чтобы понять это. Не так уж плохо, я счастлив.
Ответ 3
Для меня я использовал область полного URI, которая устарела Google с 1 сентября 2014 года, это упоминается здесь в документации python-social-auth.
http://psa.matiasaguirre.net/docs/backends/google.html#google-oauth2
Google обесценивает полные URL-адреса с 1 сентября 2014 года в пользу Google+ API и недавно введенных более коротких имен областей. Но python-social-auth уже ввел изменение областей в e3525187, который был выпущен в версии 0.14.
Однако, если вы не хотите включать API Google+ по какой-либо причине и хотите продолжить работу с полной областью полного uri, вам необходимо выполнить шаги, указанные в той же ссылке:
# Google OAuth2 (google-oauth2)
SOCIAL_AUTH_GOOGLE_OAUTH2_IGNORE_DEFAULT_SCOPE = True
SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = [
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile'
]
# Google+ SignIn (google-plus)
SOCIAL_AUTH_GOOGLE_PLUS_IGNORE_DEFAULT_SCOPE = True
SOCIAL_AUTH_GOOGLE_PLUS_SCOPE = [
'https://www.googleapis.com/auth/plus.login',
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile'
]
SOCIAL_AUTH_GOOGLE_OAUTH2_USE_DEPRECATED_API = True
SOCIAL_AUTH_GOOGLE_PLUS_USE_DEPRECATED_API = True
Это сработало для меня, поскольку я не хотел включать API Google+ на данный момент.