2014-01-08 15 views
5

自分のWebアプリケーションでYahoo Fantasy sport APIを使用したいのですが、YahooのログインにOAuthを使用しています。私はコンシューマキーと秘密キーを持っています。私は次のコードを実行すると、キーを正常に渡しました。 Yahooのログインにリダイレクトされ、ユーザーの資格情報へのアクセスを許可されます。私が同意するとページはhttps://api.login.yahoo.com/oauth/v2/request_authにリダイレクトされ、確認コードが表示されます。確認コードページの閉じるボタンを押すと、自分のURLへのコールバックではありません。Yahoo OAuth 1.0コールバックの問題?

@ts=Time.now.to_i 
    @callback_url = "http://localhost:3000/callback" 
    @nonce = SecureRandom.hex() 

     consumer = OAuth::Consumer.new("my consumerkey","secret key", 
      { :site => 'https://api.login.yahoo.com', 
      :http_method => :post, 
      :scheme => :header, 
      :oauth_nonce => @nonce, 
      :request_token_path => '/oauth/v2/get_request_token', 
      :authorize_path => '/oauth/v2/request_auth', 
      :access_token_path => '/oauth/v2/get_token', 
      :oauth_callback => "http://localhost:3000/callback", 
      :oauth_timestamp => Time.now.to_i, 
      :oauth_signature_method => "HMAC-SHA-1", 
      :oauth_version => "1.0", 
      :oauth_callback_confirmed => true, 
     }) 

    request_token = consumer.get_request_token 
    session[:request_token]=request_token 
    redirect_to request_token.authorize_url 
    access_token=request_token.get_access_token 
    access = ActiveSupport::JSON.decode(access_token.to_json) 
    if !(access.present?) 
     @response = "Response failed" 
    else 
     @response = access 
    end 

あなたはaccess_tokenはを取得するためのコールバックを取得するためになされなければどのような変更を教えてくださいすることができます。

答えて

3

コールバックの取得中に混乱していると思います。あなたのコードを次のように変更すると、必ずYahoo API呼び出しを行うためのアクセストークンを取得します。

 @@access_token = nil 
     @@request_token = nil 
    def get_request_token 
     @@consumer = OAuth::Consumer.new('consumer key', 
        'secret key', 
        { 
         :site     => 'https://api.login.yahoo.com', 
         :scheme    => :query_string, 
         :http_method   => :get, 
         :request_token_path => '/oauth/v2/get_request_token', 
         :access_token_path => '/oauth/v2/get_token', 
         :authorize_path  => '/oauth/v2/request_auth' 
       }) 
       @@request_token = @@consumer.get_request_token({ :oauth_callback => 'http://localhost:3000/callback' }) 
       session[:request_token][email protected]@request_token 
       redirect_to @@request_token.authorize_url 
       #redirect_to @@request_token.authorize_url({ :oauth_callback => 'http://localhost:3000/success' }) 

    end 


    def callback 
    request_token = ActiveSupport::JSON.decode(@@request_token.to_json) 

     if !(request_token.present?) 
      $request_token_value = "Response failed" 
     else 
      $request_token_value = request_token 
     end 
     # access_token = @@request_token.get_access_token({:oauth_verifier=>params[:oauth_verifier],:oauth_token=>params[:oauth_token]}) 
     @@access_token = @@request_token.get_access_token(:oauth_verifier=>params[:oauth_verifier]) 
     access_json = ActiveSupport::JSON.decode(@@access_token.to_json) 
     puts "****************************" 
     puts $access_json 
     puts "****************************" 
    end 
+0

ご回答いただきありがとうございます。 – Prabhu

+0

ありがとう@Manikanda Prabhuそれは私のために働いた。 – Prabhu