J'essaye de faire en sorte que Rails joue bien avec OAuth de l'API Digg. J'utilise la gemme d'oauth (celle de ruby, pas celle de rails).OAuth avec Digg API
Mon code ressemble à peu près comme ceci:
@consumer = OAuth::Consumer.new(API_KEY, API_SECRET,
:scheme => :header,
:http_method => :post,
:oauth_callback => "http://locahost:3000",
:request_token_url => 'http://services.digg.com/1.0/endpoint?method=oauth.getRequestToken',
:access_token_url => 'http://services.digg.com/1.0/endpoint?method=oauth.getAccessToken',
:authorize_url => 'http://digg.com/oauth/authorize')
@request_token = DiggController.consumer.get_request_token({
:oauth_callback => "http://xx.xxx.xxx.x:3000/digg/callback"
}, {
'Content-Type' => 'application/x-www-form-urlencoded'
})
session[:request_token] = @request_token.token
session[:request_token_secret] = @request_token.secret
redirect_to @request_token.authorize_url
Ce qui est par le livre en termes de ce que la documentation gem m'a donné. Cependant, Digg me renvoie une erreur "400 Bad Request" lorsque @ consumer.get_request_token est appelé. Je ne peux pas comprendre ce que je fais mal. Des idées?
Modifier: Code mis à jour et sortie Wireshark ajoutée. Mon erreur est maintenant "401 Autorisation requise".
sortie de Wireshark:
POST /1.0/endpoint?method=oauth.getRequestToken HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.3.6
Content-Type: application/x-www-form-urlencoded
Authorization: OAuth oauth_nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
oauth_callback="http%3A%2F%2Fxx.xxx.xxx.x%3A3000%2Fdigg%2Fcallback",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1268687137",
oauth_consumer_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
oauth_signature="xxx%2Bxxxxxxxxxxxxxxx%2Fxxxxxxx%3D", oauth_version="1.0"
Content-Length: 48
Host: services.digg.com
Content-Type=application%2fx-www-form-urlencoded
HTTP/1.1 401 Authorization Required
Date: Mon, 15 Mar 2010 21:05:37 GMT
Server: Apache
X-Powered-By: PHP/5.2.9-digg8
Cache-control: private
X-RateLimit-Current: 1
X-RateLimit-Max: 1000
X-RateLimit-Reset: 3600
X-Digg-Api-Version: 1.0
Accept-Ranges: bytes
Content-Length: 111
Keep-Alive: timeout=5, max=9998
Connection: Keep-Alive
Content-Type: text/xml;charset=utf-8
<?xml version="1.0" encoding="UTF-8"?>
<error code="5001" message="Invalid
signature" timestamp="1268687137"/>
Merci pour le conseil, mais je n'arrive même pas à la page d'autorisation Digg. Le seul paramètre qui semble importer en ce moment est request_token_url. – Karl
Utilisez tcpdump ou Wireshark pour voir ce que digg vous répond dans le corps du HTTP 400. Incidemment, http://community.freshbooks.com/forums/viewtopic.php?pid=26769 est-il utile? – vladr
J'utilise localhost: 3000 comme callback dans la connexion Oauth à Twitter et MyspaceID. Donc, ne peut pas bloquer – shingara