2010-11-23 3 views
3

Jnunemaker가 지저귐 보석 (https://github.com/jnunemaker/twitter)을 업데이트하고 Twitter :: Oauth 수업을 삭제했습니다. 내 코드는 그의 예제처럼 보이지 않으므로 업데이트하는 데 문제가 있습니다. 이 코드 변경하려고 노력했는지의 예oauth gem 및 twitter 1.0.0 gem을 사용하여 Rails 응용 프로그램의 사용자를 인증하려면 어떻게합니까?

UsersController 여기

def oauth 
    consumer = Twitter::OAuth.new('mykey','mysecret') 
    request_token = consumer.request_token 
    session[:request_token] = request_token.token 
    session[:request_token_secret] = request_token.secret 
    redirect_to 'http://api.twitter.com/oauth/authorize?oauth_token='+request_token.token 
end 

def callback 
    consumer = Twitter::OAuth.new('mykey','mysecret') 
    atoken, asecret = oauth.authorize_from_request(session[:request_token], session[:request_token_secret], params[:oauth_verifier]) 
    consumer.authorize_from_access(atoken,asecret) 
    user = Twitter::Base.new(consumer).verify_credentials 

    #and then I create a new user in my application, with attributes such as the user's follower count, etc 
end 

것 : 여기 내 코드는 트위터 0.9 보석으로 조회하는 데 사용 무엇

UsersController는

def oauth 
    consumer = OAuth::Consumer.new("mykey", "mysecret", :site => "siteurl") 
    request_token = consumer.get_request_token 
    session[:request_token] = request_token.token 
    session[:request_token_secret] = request_token.secret 
    redirect_to 'http://api.twitter.com/oauth/authorize?oauth_token='+request_token.token 
end 

def callback 
    consumer = OAuth::Consumer.new("mykey", "mysecret", :site => "siteurl") 
    request_token = session[:request_token] 
    atoken = OAuth::RequestToken.new(consumer, request_token.token, request_token.secret).get_access_token(:oauth_verifier => params[:oauth_verifier]) 
    consumer.authorize_from_access(atoken) 
    user = Twitter::Client.new(consumer).verify_credentials 

젬 파일

... 
gem 'oauth' 

콜백 메소드에는 여러 가지 문제가있을 수 있지만 이상한 점은 로컬에서 실행될 때 oauth 메소드가 제대로 작동한다는 것입니다.하지만 시도 할 때 '502 Bad Gateway'오류가 발생합니다. 내 라이브 (heroku로 배포) 버전.

+0

는 프록시를 사용하고 (즉 Apigee 부가에게 Heroku에 대한) : 컨트롤러 동작에 대한 올바른 코드는 다음과 같은 것입니까? – monocle

+0

Nope. heroku gem을 사용합니다. https://github.com/heroku/heroku – kateray

+0

access_token을 직접 사용하여 요청할 수 있습니까? 즉, access_token.request (: get, "http://api.twitter.com/1/statuses/home_timeline.json") – monocle

답변

2

것은, 나는 트위터 보석과 함께 Omniauth 보석을 사용할 수 있었다. Omniauth is very easy to setup.

그냥 Omniauth 콜백 완료 후 액세스 토큰 정보를 얻을, 트위터 보석을 사용하려면

token = omniauth['credentials']['token'], 
secret = omniauth['credentials']['secret'] 

그럼 그냥 트위터 보석 방법

Twitter.oauth_token = token 
Twitter.oauth_token_secret = secret 

Twitter.home_timeline.first.text 
를 사용하기 전에 트위터 보석 구성 설정을

(이니셜 라이저 파일에 아직 설정하지 않은 경우 Twitter 젬 consumer_key 및 consumer_key_secret를 구성해야합니다 ...)

+0

흠 나는 이것을 시도하고 있지만 여전히 작동하지 않습니다. myapp/auth/twitter로 이동 한 후 어떤 이유로 myapp로 리디렉션합니다./auth/twitter/callback? oauth_token = xxxx & oauth_verifier = xxxx. 나는 이것이 트위터 API 사이트에서 일어나야한다고 생각한다. 왜 이런 일이 일어날 지 모릅니다. – kateray

+0

내 트위터 앱의 설정 페이지에서 OAuth 1.0a Settings 아래에 다음과 같이 표시됩니다. OAuth 1.0a 통합에는 더 많은 작업이 필요합니다. 그게 아마도 그것과 관련이있을 수 있을까요? – kateray

0

행운을 빕니다

Authlogic + AuthLogic Connect.

수동으로 oauth를 구현해야하는지 잘 모르겠지만 보석을 조사 할 가치가있을 수 있습니다.

https://github.com/viatropos/authlogic-connect

내가 OAuth를 제공 발견 한 유일한 잡았다

때로는 그들이 콜백 URL을 사용하면 API 키를 얻을 곳 구성된 인식되지 않는 경우 가난한 오류 메시지를 제공합니다. 당신이 당신이 지금 무슨 작업을 얻을 수없는 경우

-Ken

0

예를 들어 가까이있었습니다.

def new 
    consumer = OAuth::Consumer.new(YOUR_CONSUMER_TOKEN, YOUR_CONSUMER_SECRET, site: 'https://api.twitter.com', request_endpoint: 'https://api.twitter.com', authorize_path: '/oauth/authenticate') 

    unless params[:oauth_token] 
     request_token = consumer.get_request_token({ oauth_callback: request.original_url }) 
     session[:request_token] = { token: request_token.token, secret: request_token.secret} 
     redirect_to request_token.authorize_url(force_login: 'true') 
    else 
     request_token = OAuth::RequestToken.from_hash(consumer, oauth_token: session[:request_token]["token"], oauth_token_secret: session[:request_token]["secret"]) 
     access_token = request_token.get_access_token(oauth_verifier: params[:oauth_verifier]) 
     session[:request_token] = nil 

     @client = Twitter::REST::Client.new do |config| 
     config.consumer_key  = YOUR_CONSUMER_TOKEN 
     config.consumer_secret  = YOUR_CONSUMER_SECRET 
     config.access_token  = access_token.token 
     config.access_token_secret = access_token.secret 
     end 
    end 
    end 
관련 문제