【发布时间】:2013-03-28 07:04:58
【问题描述】:
Twitter 最近刚刚强制执行以下操作:
1) 您必须将 oauth_callback 值传递给 oauth/request_token。这不是可选的。即使你已经在 dev.twitter.com 上设置了一个。如果您使用带外 OAuth,请传递 oauth_callback=oob。
2) 您必须将 oauth_verifier 传递给您从执行的回调中收到的或您收到的最终用户手动输入的 oauth/access_token。
这是推特线程(https://dev.twitter.com/discussions/16443)
这导致 Twython get_authorized_tokens 抛出此错误:
Request: oauth/access_token
Error: Required oauth_verifier parameter not provided
我有两个问题:
1.如何使用 Twython 将 oauth_callback 值传递给 oauth/request_token?
2。 oauth_verifier怎么传递?
我可以使用 request.GET['oauth_verifier'] 从回调 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
【问题讨论】:
-
你的
reverse('account.views.twitter_thanks')不正确,应该是reverse('account:twitter_thanks')。你能发布你的网址代码 -
@catherine 实际上
reverse('account.views.twitter_thanks')工作正常。这是网址:url(r'^register/twitter/thanks/?$', 'account.views.twitter_thanks', name='twitter_thanks')。不过,很高兴知道编写视图的简写方式,谢谢。 -
您从哪里获得这些代码?实际上,您的代码与我的 twitter 登录相同,并且运行良好。
标签: python django twitter twitter-oauth twython