2010-07-03 165 views
1

好吧,我试了很多次之后就拉着我的头发去调试。 所以请在这里帮助我。在我重新导向后,我一直收到401 Unauthorized error401未经授权的foursquare 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 2010-07-03 20:18:27

+0

Thnx Adrian。我的代码没有换行符,它只是在stackoverflow上,它似乎有一个。 – Manas 2010-07-05 15:05:59

+0

你解决了这个问题吗? – ck3g 2012-02-07 08:55:59

回答

1

我知道绝对没有什么了解OAuth,这可能是完全错误的,但是,如果http://foursquare.com是不是你的本地计算机和oauth_callback是一个URL,当它完成,然后将回调到自身http://foursquare.com将调用因为它的本地主机的定义将是它自己的127.0.0.1即它本身。

如果我在这里猜到了,然后将:oauth_callback更改为您的公共IP地址/名称。

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" 
}) 
相关问题