【问题标题】:Accessing Twitter with Django and Javascript使用 Django 和 Javascript 访问 Twitter
【发布时间】:2012-07-08 22:43:00
【问题描述】:

这是我之前在here 上发布的问题的后续。

基本上,我一直在尝试实现一种通过 javascript 向 twitter oauth 资源发送请求的方法。我有一个运行 Django 应用程序的服务器,该应用程序使用 Django-social-auth 将用户注册到 Tiwtter。获得授权后,我获得了用户 access_token 和 oauth_token_secret。

在客户端,我有一个 javascript 应用程序,它调用我的服务器来计算适当的标头,我使用 python oauth2 来执行此操作。执行此操作的代码如下:

url = request.POST['url']

params = {
    'oauth_version': "1.0",
    'oauth_nonce': oauth.generate_nonce(),
    'oauth_timestamp': int(time.time()),
    }

at = social.extra_data['access_token'].split('&oauth_token=')[1]
ats = social.extra_data['access_token'].split('&oauth_token=')[0].split('oauth_token_secret=')[1]

token = oauth.Token(key=at, secret=ats)
consumer = oauth.Consumer(key=settings.TWITTER_CONSUMER_KEY, secret=settings.TWITTER_CONSUMER_SECRET)

params['oauth_token'] = token.key
params['oauth_consumer_key'] = consumer.key

req = oauth.Request(method="GET", url=url, parameters=params)

signature_method = oauth.SignatureMethod_HMAC_SHA1()
req.sign_request(signature_method, consumer, token)

这个请求参数然后被发送到使用这些参数调用 Twitter 的客户端:

$.ajax({
    url: "https://api.twitter.com/1/statuses/home_timeline.json",
    data: parameters,
    dataType: 'jsonp',
    success: function(twitter_data) {
    console.log('twitter_data = ', twdata);
    },
    error: function(jqXHR, textStatus, errorThrown) {
    console.log('err = ', textStatus);
    console.log('err = ', errorThrown);
    }
});

生成对资源的请求,例如:

https://api.twitter.com/1/statuses/home_timeline.json?callback=jQuery17107030615725088865_1341786299930&oauth_nonce=15094349&oauth_timestamp=1341785696&oauth_consumer_key=[OAUTH_CONSUMER_KEY HERE]&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_token=[OAUTH_TOKEN HERE]0&oauth_signature=pQwHlKmepgtym%2Ffj%2BupCGP8mv3s%3D&page=2&include_entities=true&_=1341786306712

我仍然收到 401 Unauthorized 错误。我检查了三遍代码,所以想知道我是否遗漏了什么???

谢谢。

【问题讨论】:

    标签: javascript ajax twitter django-socialauth


    【解决方案1】:

    对于需要身份验证的请求,您必须将身份验证参数放在名为Authorization 的 HTTP 标头中,而不是放在 POST 参数中。此处的 Twitter API 文档对此进行了解释:https://dev.twitter.com/docs/auth/authorizing-request

    【讨论】:

    • 我不能这样做,因为我使用 JSONP 来解决跨域问题,并且使用 JSONP 你不能添加 HTTP 标头。我确定 twitter 允许以其他方式发送参数,因此可以从浏览器进行跨域调用
    • 没有。这写在我给你的链接上的 Twitter API 文档中:“Twitter 的 [OAuth 1.0a] 实现要求需要授权的请求包含额外的 HTTP 授权标头”。
    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 2014-03-09
    • 2016-02-03
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    相关资源
    最近更新 更多