首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >雅虎Oauth2第三步

雅虎Oauth2第三步
EN

Stack Overflow用户
提问于 2018-08-14 11:57:20
回答 1查看 642关注 0票数 1

我正在尝试创建一个快速的网络应用程序,认证到一个用户的雅虎帐户,但我有问题获得‘用户批准’。

Yahoo Auth Page

就我个人而言,每次我访问外部网站并进行身份验证时,我通常都会登录我的帐户。这似乎是将我重定向到一个页面,并要求提供代码。我不知道我需要提供什么代码才能进行身份验证。如果我不知道,我的用户肯定不会知道!我正在构建一个flask应用程序,并尝试围绕this repo对我的代码进行建模。

我已经为雅虎添加了一些专门的代码,但似乎无法连接这些点。在下面的oauth.py文件中新建YahooSignIn子类:

代码语言:javascript
复制
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‘参数的额外链接

代码语言:javascript
复制
<p><a href="{{ url_for('oauth_authorize', provider='yahoo') }}">Login with Yahoo</a></p>

任何帮助都将不胜感激,因为这件事在过去的两个晚上把我难住了,我很乐意忘掉这件事!

EN

回答 1

Stack Overflow用户

发布于 2018-08-29 10:45:22

在今年(2018/19)之前,我一直在使用Yahoo的Oauth 1.0 API。今年,我在使用它时遇到了问题,所以我通过下面链接的yahoo-oauth库改用了Oauth 2.0。他们有一个很好的页面,描述了如何使用他们的库。下面是我使用的代码。

代码语言:javascript
复制
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/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51833491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档