OAuth2 Яндекс на Flask
В документации явно проблемы с последовательностью...
Во-общем,
Создал приложение в личном кабинете. Указал в поле "Callback URI" - где буду ловить ответ (redirect_uri)
Скачал и поставил на сайт кнопку "Войти через Яндекс". На кнопку поставил ссылку:
link_yandex_auth = f'https://oauth.yandex.ru/authorize?response_type=token&client_id={client_id}&' \ f'redirect_uri={redirect_uri}&login_hint={login_hint}&scope={scope}&'\ f'force_confirm=yes&display=popup'login_hint- указал emailscope- указала права, указанные при создании приложенияПытаюсь поймать токен на странице redirect_uri, но он приходит в адресной строке после знака #, соответственно через request.values.get() он не достается (если бы был не # а ?, то достал бы)
- Соответственно взяв из документации js-скрипт:
var token = /access_token=([^&]+)/.exec(document.location.hash)[1];
Он достается, но лежит теперь уже на странице и соответственно в роутах Flask к нему нет доступа, а как мне его закидывать в заголовок и отправлять на
https://login.yandex.ru/info?format=json&with_openid_identity=yes
чтобы взять email пользователя?
Может, что-то я не так делаю?
Ответы (1 шт):
Да, всё верно, нужно делать два запроса. Из документации это не сразу видно, так как нет сжатого описания "как это работает", а сразу длинные портянки подробного описания.
Правда мои шаги относятся не к Flask а к RubyOnRails, но кажется суть в том-же...
Первый шаг - Достигается подключением скрипта sdk-suggest.js на странице где показываем кнопку яндекса (или виджет). Происходит вызов пользователем страницы https://Redirect.URI/для/веб/сервисов#access_token=ACCESS_TOKEN&token_type=bearer&expires_in=123456789
Второй шаг - Достигается подключением скрипта sdk-suggest-token.js на странице https://Redirect.URI/для/веб/сервисов#... Этот скрипт, если я правильно понял, должен отработать и отправить запрос на наш бэк и сразу закрыть это всплывающее окно.