如何传值oauth_callback到OAuth / request_token与Twython(H

2019-08-19 21:54发布

微博最近刚刚做了如下强制性:

1)您必须通过oauth_callback值的OAuth / request_token。 这不是可选的。 即使你有一个已经设置dev.twitter.com。 如果你正在做的带外的OAuth,通过oauth_callback=oob

2)你必须沿着传递oauth_verifier您从执行回调接收或由最终用户到OAuth /是的access_token收到手工输入。 这是Twitter的线程( https://dev.twitter.com/discussions/16443 )

这已经引起了Twython get_authorized_tokens抛出这个错误:

Request: oauth/access_token

Error: Required oauth_verifier parameter not provided

我有两个问题:

1.你如何通过oauth_callback值到OAuth /与Twython request_token?

2.你如何沿着传递oauth_verifier

我可以得到oauth_verifier与从request.GET中的回调URL [“oauth_verifier”],但我不知道从那里使用Twython做。 我到处寻找,但没有发现任何答案,所以我决定发布此。 这是我的第一篇所以请善待;)

这里是我的代码:

def register_twitter(request):
    # Instantiate Twython with the first leg of our trip.
    twitter = Twython(
        twitter_token = settings.TWITTER_KEY,
        twitter_secret = settings.TWITTER_SECRET,
        callback_url = request.build_absolute_uri(reverse('account.views.twitter_thanks'))
    )

    # Request an authorization url to send the user to
    auth_props = twitter.get_authentication_tokens()

    # Then send them over there
    request.session['request_token'] = auth_props
    return HttpResponseRedirect(auth_props['auth_url'])


def twitter_thanks(request, redirect_url=settings.LOGIN_REDIRECT_URL):

    # Now that we've got the magic tokens back from Twitter, we need to exchange
    # for permanent ones and store them...
    twitter = Twython(
        twitter_token = settings.TWITTER_KEY,
        twitter_secret = settings.TWITTER_SECRET,
        oauth_token = request.session['request_token']['oauth_token'],
        oauth_token_secret = request.session['request_token']['oauth_token_secret'],
    )

    # Retrieve the tokens
    authorized_tokens = twitter.get_authorized_tokens()

    # Check if twitter user has a UserProfile
    try:
        profile = UserProfile.objects.get(twitter_username=authorized_tokens['screen_name'])
    except ObjectDoesNotExist:
        profile = None

Answer 1:

我解决我自己的答案。 下面是它是否能够帮助别人解决方案:

在文件Twython.py,我添加了一个新的参数oauth_verifier到Twython类的构造函数。 我得到的oauth_verifier从价值callback_url我twitter_thanks视图。

get_authorized_tokens我删除了这行代码:

response = self.client.get(self.access_token_url)

并添加以下代码:

callback_url = self.callback_url or 'oob'
request_args = urllib.urlencode({'oauth_callback': callback_url, 'oauth_verifier':self.oauth_verifier })
response = self.client.post(self.access_token_url, params=request_args)

现在它就像一个魅力,是OAuth的1.0A标准。



文章来源: How to pass oauth_callback value to oauth/request_token with Twython