2011-11-07 21 views
6

Tôi có một ứng dụng Rails đơn giản mà tôi đang cố gắng sử dụng API Netflix để truy cập vào một số thông tin người đăng ký của tôi, chẳng hạn như lịch sử và hàng đợi của tôi. Vấn đề của tôi là không có vấn đề gì tôi làm, Netflix sẽ không sử dụng địa chỉ của tôi oauth_callback, nhưng thay vì chuyển tiếp tôi đến trang Netflix sau khi tôi cho phép ứng dụng có thông tin đăng nhập của người dùng của tôi.Làm cách nào để API OAuth Netflix sử dụng tính năng gọi lại của tôi?

Đây là mã điều khiển được đưa ra yêu cầu đối với API Netflix

class ExportController < ApplicationController 

    def export 
    consumer = OAuth::Consumer.new(ENV['NETFLIX_KEY'],ENV['NETFLIX_SECRET'], 
     :site => "http://api.netflix.com", 
     :request_token_url => "http://api.netflix.com/oauth/request_token", 
     :access_token_url => "http://api.netflix.com/oauth/access_token", 
     :authorize_url => "https://api-user.netflix.com/oauth/login") 
    request_token = consumer.get_request_token 
    session[:request_token]=request_token 
    session[:request_token_secret]=request_token.secret 
    url = request_token.authorize_url(:oauth_callback => "http://#{ENV['OAUTH_CALLBACK_DOMAIN']}/export_callback/", :oauth_consumer_key => ENV['NETFLIX_KEY'], 
     :application_name => ENV['APPLICATION_NAME']) 
    redirect_to url 
    end 

    def export_callback 
    @request_token=OAuth::RequestToken.new(session[:request_token],session[:request_token_secret]) 
    @access_token = @request_token.get_access_token(:oauth_verifier => params[:oauth_verifier]) 
    end 
end 

Bộ điều khiển một cách chính xác chuyển hướng đến trang web https://api-user.netflix.com/oauth/login, với tất cả các thông số thiết lập một cách chính xác. Tôi nhận được trang ứng dụng Netflix Login/Authorize.

Netflix Link Account page

Tuy nhiên, nếu tôi nhìn vào mã nguồn của trang này, tôi nhìn thấy trong hình thức mà lĩnh vực oauth_callback được thiết lập để oob

 <input type="hidden" name="oauth_callback" value="oob"/> 

Tôi đã kiểm tra nhiều cách khác nhau, và Tôi đang đặt thông số oauth_callback giống như thông số Netflix Authentication Walkthrough. Trong thực tế, khi tôi đi qua các hướng dẫn và đặt trong url gọi lại của tôi trong lĩnh vực của họ, nó trong thực tế chuyển hướng trở lại ứng dụng đường ray của tôi.

Vì vậy, câu hỏi của tôi, có ai biết cách làm cho Netflix tôn trọng trường oauth_callback của tôi không?

chỉnh sửa:

https://api-user.netflix.com/oauth/login?oauth_callback=http%3A%2F%2Fnetflix.dev%2Fexport_callback%2F&oauth_consumer_key=[REMOVED]&oauth_nonce=631831&oauth_timestamp=1321458391&application_name=[REMOVED]&oauth_token=[REMOVED] 

Bạn có thể thấy oauth_callback=http%3A%2F%2Fnetflix.dev%2Fexport_callback%2F được thiết lập, đó là con đường để ứng dụng đường ray địa phương của tôi.

edit2:

Tôi đang sử dụng oauth (0.4.5)rails (3.1.0)ruby-1.9.2-p290 [ x86_64 ] trên Mac OS X 10.6.8.

+0

Bạn có thể vui lòng cung cấp thông số yêu cầu khi yêu cầu chuyển sang người dùng không (và đừng quên ngẫu nhiên băm!)? –

+0

không phải là oauth_callback cho cuộc gọi consumer.get_request_token của bạn? xem http://developer.netflix.com/docs/Security – esskar

+0

@phil pirozhkov Tôi đã thêm yêu cầu vào api-user. – sorens

Trả lời

1

Các oob có trong biểu mẫu có thể đề cập đến "ngoài giới hạn". Vấn đề là:

request_token = consumer.get_request_token 

Netflix giúp bạn chuyển vào url gọi lại khi nhận mã thông báo yêu cầu và xác minh url trong trang đăng nhập. Trong trường hợp của bạn, nếu bạn thay đổi thành:

request_token = consumer.get_request_token( 
      :oauth_callback => 
      "http://#{ENV['OAUTH_CALLBACK_DOMAIN']}/export_callback/") 

Mọi thứ sẽ hoạt động từ thời điểm đó và biểu mẫu sẽ nhận được giá trị này. Tôi đã thử nghiệm mã của bạn và nhận được cùng một số oob và sau đó thêm thay đổi và nó đã đưa ra giá trị chính xác trong biểu mẫu.

-1

Hãy thử Netflix Authentication Walk-Through và xem nó có hoạt động cho tài khoản của bạn không? nó đã làm việc cho tôi bằng cách sử dụng firefox. (tôi cũng sao chép & dán url vào IE sau đó và đã chuyển hướng correcly). Sau đó, bạn nên cố gắng so sánh url từ walk-through với url bạn đang tạo ra và giải quyết vấn đề.

+0

Nếu bạn đọc câu hỏi của tôi, tôi đã chỉ ra rằng tôi đã sử dụng phần hướng dẫn để so sánh kết quả của mình. – sorens

+0

xấu của tôi, nó gây nhầm lẫn cho tôi kể từ khi gọi lại chỉ là một tham số bình thường: không ký hoặc bất cứ điều gì; thay đổi nó sau đó không phải là một vấn đề (tôi có nghĩa là sau khi bạn nhìn thấy màn hình đăng nhập sửa chữa net)! – esskar

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