【问题标题】:Yahoo OAuth 1.0 Callback Issue?雅虎 OAuth 1.0 回调问题?
【发布时间】:2014-01-26 12:12:52
【问题描述】:

我想在我的网络应用程序中使用 Yahoo Fantasy Sport API,为此我使用 OAuth 进行 Yahoo 登录。我有消费者密钥和秘密密钥,当我运行以下代码时,我成功传递了密钥。它重定向到雅虎登录,它要求访问用户凭据的权限。如果我同意页面重定向到https://api.login.yahoo.com/oauth/v2/request_auth 并显示验证码。如果我在验证码页面按下关闭按钮,它不会回调到我的 URL。

 @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。

【问题讨论】:

    标签: ruby-on-rails oauth omniauth yahoo-api yahoo-oauth


    【解决方案1】:

    我认为您在收到回调时感到困惑。如下更改代码,您一定会获得访问令牌以进行 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]=@@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
    

    【讨论】:

    • 感谢您的回复,我会按照您提到的那样尝试。
    猜你喜欢
    • 2015-10-26
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多