2011-01-12 39 views
10

Tôi đang sử dụng OAuth-Ruby để thực hiện xác thực OAuth bằng ứng dụng Tumblr. Tôi có thể viết mã tiến hành qua các bước khác nhau của OAuth, nhưng tôi không thể nhận được mã thông báo truy cập hoặc thực sự yêu cầu. Tôi có thể nhận được một yêu cầu quan trọng, chuyển hướng người dùng đến Tumblr để xác thực và cấp quyền truy cập, và nhận được một yêu cầu xác thực quan trọng. Nhưng tôi không thể đi xa hơn thế.Nhận mã thông báo truy cập bằng API OAuth-Ruby và Tumblr (Rails 3)

Tôi đã đăng ký ứng dụng Tumblr của mình; chúng ta hãy giả định cho câu hỏi này mà nó đã cung cấp cho tôi với các phím sau:

  • khóa người dùng OAuth: @oauth_consumer_key
  • bí mật chính: @secret_key

(tôi có giá trị thực tế, nhưng tôi giữ chúng ở đây vì lý do rõ ràng.)

Tôi đang chạy mã sau trong bộ điều khiển chạy khi người dùng gửi biểu mẫu, biểu mẫu lưu trữ thông tin trong biến @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 

Mã này đưa tôi đến đúng trang tại Tumblr, nơi người dùng cấp hoặc từ chối quyền truy cập ứng dụng của tôi vào tài khoản của người dùng. Giả sử người dùng cấp quyền truy cập, Tumblr chuyển hướng trở lại ứng dụng của tôi, đến một cuộc gọi lại mà tôi đã cung cấp khi đăng ký ứng dụng bằng Tumblr. Đến thời điểm đó, mọi thứ đều hoạt động tốt đẹp.

My OAuth callback chạy đoạn mã sau vào bộ điều khiển:

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 

Tại Bước 3, có một vấn đề. Tôi dường như không thể nhận được mã thông báo truy cập bằng dòng:

@access_token = @request_token.get_access_token 

Ai đó có thể cho tôi biết những gì tôi cần làm để nhận mã thông báo truy cập? Khi tôi chạy dòng đó, tôi nhận được lỗi OAuth :: Không được phép.

Tôi thực sự đánh giá cao mọi lời khuyên. Tôi đã được Googling và cố gắng những thứ khác nhau trong nhiều ngày. Cảm ơn!

+3

Tất nhiên, bây giờ tôi đã tìm nó ra chỉ sau khi đăng. Để mang lại lợi ích cho những người khác có thể ở trên một chiếc thuyền tương tự, vấn đề là việc triển khai thực hiện Tumblr OAuth đang mong đợi khóa oauth_verifier mà nó chuyển đến cuộc gọi OAuth mà bạn cung cấp. Vì vậy, mã @access_token = @ request_token.get_access_token cần phải được thay đổi thành @access_token = @ request_token.get_access_token ({: oauth_verifier => params [: oauth_verifier]}). –

+0

Wow, điều này đã giúp tôi rất nhiều. Tumblr nên đề cập đến điều này trên trang API của họ, vì tôi lãng phí một vài giờ tốt cố gắng tìm ra vấn đề chính xác này. – dreadpirateryan

Trả lời

2

tôi sử dụng Pelle's oauth plugin và sửa đổi nó một chút để hỗ trợ xauth như thế này:

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

Nó bị kẹt và không đáp ứng. Bạn có thể xác nhận mã của bạn làm việc cho bạn không? – defhlt

Các vấn đề liên quan