Yahoo Oauth2, шаг 3

Я пытаюсь создать быстрое веб-приложение, которое аутентифицируется в учетной записи пользователя Yahoo, но у меня возникают проблемы с получением «утверждения пользователя».

Страница авторизации Yahoo

Лично я каждый раз, когда захожу на внешний веб-сайт и мне нужно пройти аутентификацию, я обычно вхожу в свою учетную запись. Кажется, это перенаправляет меня на страницу и запрашивает код. Я не знаю, какой код мне нужно было бы предоставить для аутентификации. И если я не знаю, то мои пользователи точно не узнают! Я создаю приложение для фляги, и я попытался смоделировать свой код на основе это репо.

Я добавил код специально для Yahoo, но, похоже, не могу соединить точки. Новый подкласс YahooSignIn в файле oauth.py ниже:

class YahooSignIn(OAuthSignIn):
def __init__(self):
    super(YahooSignIn, self).__init__('yahoo')
    self.service = OAuth2Service(
        name='yahoo',
        consumer_id=self.consumer_id,
        consumer_secret=self.consume_secret,
        authorize_url='https://api.login.yahoo.com/oauth/v2/request_auth',
        access_token_url='https://api.login.yahoo.com/oauth/v2/get_token',
        base_url='http://fantasysports.yahooapis.com/'
    )

def authorize(self):
    return redirect(self.service.get_authorize_url(
        scope='email',
        response_type='code',
        redirect_uri=self.get_callback_url())
    )

def callback(self):
    def decode_json(payload):
        return json.loads(payload.decode('utf-8'))

    if 'code' not in request.args:
        return None, None, None
    oauth_session = self.service.get_auth_session(
        data = {'code': request.args['code'],
              'grant_type': 'authorization_code',
              'redirect_uri': self.get_callback_url()},
        decoder=decode_json
    )
    me = oauth_session.get('me?fields=id,email').json()
    return (
        'yahoo$' + me['id'],
        me.get('email').split('@')[0],
        me.get('email')
    )

Единственное другое изменение, внесенное на страницу index.html, - добавление дополнительной ссылки с параметром yahoo.

<p><a href = "{{ url_for('oauth_authorize', provider='yahoo') }}">Login with Yahoo</a></p>

Любая помощь будет принята с благодарностью, так как этот вопрос поставил меня в тупик последние две ночи, и я хотел бы пройти мимо этого!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
586
1

Ответы 1

До этого года (2018/19) я использовал Yahoo Oauth 1.0 API. В этом году у меня возникли проблемы с его использованием, поэтому я переключился на использование Oauth 2.0 через библиотеку yahoo-oauth, указанную ниже. У них есть хорошая страница, описывающая, как использовать их библиотеку. Вот код, который я использовал.

from yahoo_oauth import OAuth2

class YahooFantasyAPI:

  def fetchGameID(self):
    session = self.getSession()
    r = session.get(
    'https://fantasysports.yahooapis.com/fantasy/v2/game/nfl'
    )
    print(r.text)

  def getSession(self):
    oauth = OAuth2(None, None, from_file='oauth2.json')

    if not oauth.token_is_valid():
        oauth.refresh_access_token()

    return oauth.session

api = YahooFantasyAPI()
fetchGameID()

https://yahoo-oauth.readthedocs.io/en/latest/

Другие вопросы по теме