2011-01-12 13 views
10

के साथ एक एक्सेस टोकन प्राप्त करना मैं Oumb-Ruby का उपयोग Tumblr एप्लिकेशन के साथ OAuth प्रमाणीकरण करने के लिए कर रहा हूं। मैं कोड लिखने में सक्षम हूं जो ओएथ के विभिन्न चरणों के माध्यम से प्रगति करता है, लेकिन मुझे टोकन तक पहुंच नहीं मिल सकती है या वास्तव में अनुरोध नहीं किया जा सकता है। मैं एक अनुरोध कुंजी प्राप्त कर सकता हूं, उपयोगकर्ता को प्रमाणीकरण और पहुंच प्रदान करने के लिए Tumblr पर रीडायरेक्ट कर सकता हूं, और एक प्रमाणित अनुरोध कुंजी प्राप्त कर सकता हूं। लेकिन मैं उससे कहीं ज्यादा नहीं मिल सकता।OAuth-Ruby और Tumblr API (Rails 3)

मैंने अपना टंबलर एप्लिकेशन पंजीकृत किया है;

  • OAuth उपभोक्ता कुंजी:: चलो इस सवाल यह है कि यह मेरा पीछा कुंजी के साथ प्रदान की गई है के लिए मान लें @oauth_consumer_key
  • गुप्त कुंजी:

@secret_key (मैं वास्तविक मान है, लेकिन मैं कर रहा हूँ उन्हें स्पष्ट कारणों से यहां छुपाया गया है।)

मैं एक नियंत्रक के भीतर निम्न कोड चला रहा हूं जो उपयोगकर्ता द्वारा एक फॉर्म सबमिट करता है, जो @tumblog चर में स्टोर की जानकारी बनाता है:

#0. provided when registering application 
@key = @oauth_consumer_key 
@secret = @secret_key 
@site = 'http://www.tumblr.com' 
@consumer = OAuth::Consumer.new(@key, @secret, 
           { :site => @site, 
           :request_token_path => '/oauth/request_token', 
           :authorize_path => '/oauth/authorize', 
           :access_token_path => '/oauth/access_token', 
           :http_method => :post }) 
if @consumer 
    #1. get a request token 
    @request_token = @consumer.get_request_token; 
    session[:request_token] = @request_token 
    session[:tumblog] = @tumblog 

    #2. have the user authorize 
    redirect_to @request_token.authorize_url 
else 
    flash[:error] = "Failed to acquire request token from Tumblr." 
    render 'new' 
end 

यह कोड मुझे टंबलर पर सही पृष्ठ पर ले जाता है, जहां उपयोगकर्ता उपयोगकर्ता के खाते में मेरे एप्लिकेशन तक पहुंच प्रदान करता है या अस्वीकार करता है। उपयोगकर्ता को अनुदान पहुंच मानते हुए, टंबलर ने मेरे आवेदन पर वापस रीडायरेक्ट किया, जब मैंने टंबलर के साथ एप्लिकेशन पंजीकृत किया था। उस बिंदु पर, सब कुछ खूबसूरती से काम करता है।

मेरे OAuth कॉलबैक नियंत्रक में निम्न कोड चलाता है:

if params[:oauth_token] && params[:oauth_verifier] 
    @tumblog = session[:tumblog] 
    @request_token = session[:request_token] 

    #3. get an access token 
    @access_token = @request_token.get_access_token 

    . . . . 
end 

चरण 3 में, वहाँ एक समस्या है। मैं वास्तव में लाइन के साथ एक पहुंच टोकन प्राप्त नहीं कर पा रहे:

@access_token = @request_token.get_access_token 

कोई मुझे बता सकते हैं मैं पहुंच टोकन प्राप्त करने क्या करने की जरूरत? जब मैं उस पंक्ति को चलाता हूं, तो मुझे ओएथ :: अनधिकृत त्रुटि मिलती है।

मैं वास्तव में किसी भी सलाह की सराहना करता हूं। मैं गुगल रहा हूं और कई दिनों के लिए अलग-अलग चीजों की कोशिश कर रहा हूं। धन्यवाद!

+3

, अब मैं यह पता लगा है बस पोस्ट करने के बाद। अन्य लोगों को लाभ पहुंचाने के लिए जो एक समान नाव में हो सकते हैं, समस्या यह है कि टंबलर ओएथ कार्यान्वयन oauth_verifier कुंजी की अपेक्षा कर रहा है जो यह आपके द्वारा आपूर्ति की गई ओथ कॉलबैक पर जाता है। तो, कोड @access_token = @ request_token.get_access_token को @access_token = @ request_token.get_access_token ({: oauth_verifier => पैराम्स [: oauth_verifier]} में बदला जाना चाहिए)। –

+0

वाह, इससे मुझे बहुत मदद मिली। टंबलर को अपने एपीआई पेज पर इसका जिक्र करना चाहिए, क्योंकि मैंने इस सटीक मुद्दे को समझने के लिए कुछ अच्छे घंटों बर्बाद कर दिए थे। – dreadpirateryan

उत्तर

2

मैं Pelle's oauth plugin उपयोग करें और यह एक छोटे से इस तरह xauth समर्थन करने के लिए संशोधित किया गया:

require 'rubygems' 
require 'oauth' 

CONSUMER_KEY = 'YOUR_CONSUMER_KEY' 
CONSUMER_SECRET = 'YOUR_CONSUMER_SECRET' 

consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site => 'https://www.tumblr.com/oauth/access_token') 
access_token = consumer.get_access_token(nil, {}, { :x_auth_mode => 'client_auth', 
                :x_auth_username => "[email protected]", 
                :x_auth_password => "password"}) 
tumblr_credentials = access_token.get('http://www.tumblr.com/api/authenticate') 

puts access_token 
puts access_token.token 
puts access_token.secret   
puts tumblr_credentials.body 
बेशक
+1

यह अटक गया और जवाब नहीं दे रहा है। क्या आप पुष्टि कर सकते हैं कि आपके कोड आपके लिए काम करते हैं? – defhlt

संबंधित मुद्दे