2010-07-03 2 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에 LINEBREAK을 제거해야합니다 = @ access_token.get ("ht ....'line? – Adrian

+0

Thnx Adrian. 내 코드에는 줄 바꿈이 없습니다. 단지 stackoverflow에 줄 바꿈이있는 것 같습니다. – Manas

+0

이 문제를 해결 했습니까? – ck3g

답변

1

내가 OAuth를 대해 아무것도 알지 이것은 완전히 잘못 될 수 있지만, http://foursquare.com 로컬 시스템이 아닌 경우에 oauth_callback 그것이 그 자체로 다시 호출됩니다 다음 완료되면 http://foursquare.com가 호출하는 URL입니다 localhost의 정의가 자신의 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" 
}) 
관련 문제