2010-07-03 4 views
1

Хорошо, я тяну свои волосы, пробовав слишком много раз, чтобы отлаживать. Так что, пожалуйста, помогите мне здесь. Я продолжаю получать 401 Unauthorized error после того, как перенаправлен обратно.401 Несанкционированно для четырехквартирных домов OAuth

Вот мой код. Что я здесь делаю неправильно?

require 'rubygems' 
require 'OAuth' 
require 'json' 

class SessionController < ApplicationController 

    before_filter :load_oauth 

    def index 

    if session[:request_token] && params[:oauth_token] 
     @request_token = OAuth::RequestToken.new(@consumer, 
session[:request_token], session[:request_secret]) 
     @access_token = 
@request_token.get_access_token(:oauth_verifier => 
params[:oauth_verifier]) 
     puts @access_token 
     @info = @access_token.get("http://api.foursquare.com/v1/ 
test") 

     flash[:notice] = "Foursquare! Yay!" 

    else 
     redirect_to(@foursqrurl) 
    end 

    end 

    private 
    def load_oauth 
    @oauth_key = 'key' 
    @oauth_secret = 'secret' 
    @consumer = OAuth::Consumer.new(@oauth_key,@oauth_secret,{ 
     :site    => "http://foursquare.com", 
     :scheme    => :header, 
     :http_method  => :post, 
     :request_token_path => "/oauth/request_token", 
     :access_token_path => "/oauth/access_token", 
     :authorize_path  => "/oauth/authorize" 
    }) 

    @request_token = @consumer.get_request_token(:oauth_callback => 
"http://localhost:3001/session") 
    session[:request_token] = @request_token.token 
    session[:request_secret] = @request_token.secret 
    puts @request_token.token 
    puts @request_token.secret 
    # redirecting user to foursquare to authorize 
    @foursqrurl = @request_token.authorize_url 
    puts @foursqrurl 

    end 

end 
+0

Может быть, вы должны удалить разрыв строки в '@info = @ access_token.get ("ht ....' line? – Adrian

+0

Thnx Adrian. У моего кода не было разрыва строки, его просто здесь, в stackoverflow, похоже, что он есть. – Manas

+0

Вы решили эту проблему? – ck3g

ответ

1

Я абсолютно ничего не знаю о Oauth, и это может быть совершенно неправильно, но, если http://foursquare.com не ваша локальная машина и oauth_callback является URL, который http://foursquare.com позвонит, когда он закончил, то это будет вызывать обратно к себе поскольку его определение localhost будет его собственным 127.0.0.1, т.е. само собой.

Если я правильно понял здесь, измените: oauth_callback на общедоступный IP-адрес/имя.

0

0 думаю, @request_token = OAuth::RequestToken.new(@consumer, session[:request_token], session[:request_secret]) это не так.

Если у вас уже есть токен и секрет, вам действительно не нужно делать верификатор.

Вы должны построить его так:

OAuth::RequestToken.from_hash(consumer, { :oauth_token => params[:oauth_token] }) 
access_token = request_token.get_access_token(:oauth_verifier => params[:oauth_verifier]) 

Или, если у вас уже есть маркер и секрет, вы должны сделать:

access_token = OAuth::AccessToken.from_hash(consumer, { 
    :oauth_token => "YOUR_TOKEN", 
    :oauth_token_secret => "YOUR_SECRET" 
})