2011-11-12 4 views
1

트위터 생성을 위해 omniauth & twitter gem을 사용하는 데 문제가 있습니다.Rails Twitter Gem Omniauth

나는이 튜토리얼 http://blog.assimov.net/post/2358661274/twitter-integration-with-omniauth-and-devise-on-rails-3

을 사용하고 난, 트위터를 사용하여 로그인 인증을 생성하지만 난 트윗을 업데이트 할 수 있습니다.

current_user.twitter.update("My Rails 3 App with Omniauth, Devise and Twitter") 

이 줄은 메소드 업데이트에 대해 불평합니다.

위의 튜토리얼에 대해 혼란스러운 점은 처음에는 인증에 비밀번호를 저장하기 위해 마이 그 레이션을 생성하지만 나중에 튜토리얼의 뒷부분에 코드를 변경하여 데이터베이스에 비밀번호를 쓰는 언급이 없다는 것입니다.

내 이해는 세션 쿠키에 저장된 omniauth 해시에서 얻은 비밀입니다. 내가 여기서 무엇을 놓치고 있니?

def hash_from_omniauth(omniauth) 
    { 
     :provider => omniauth['provider'], 
     :uid => omniauth['uid'], 
     :token => (omniauth['credentials']['token'] rescue nil), 
     :secret => (omniauth['credentials']['secret'] rescue nil) 
    } 
end 

그래서 모든 것이 Twitter 클라이언트를 만드는 것과 별개로 작동하므로 업데이트 방법을 사용할 수 없습니까? 여기

current_user.twitter.update("first tweet") 

트위터 방법은 내가 문제를 설명에서 큰 아니에요 죄송 트위터 클라이언트

def twitter 
debugger 
unless @twitter_user 
    provider = self.authentications.find_by_provider('twitter') 
    @twitter_user = Twitter::Client.new(:oauth_token => provider.token, :oauth_token_secret => provider.secret)rescue nil 
end 
@twitter_user 

에게

를 작성해야합니다. 어떤 도움이라도 대단히 감사합니다. 감사합니다 L

+0

다른 용도로 트위터 젬을 사용하고 있습니까? – mnelson

답변

2

트위터에 게시하기 만하면 트위터의 보석을 완전히 버릴 수 있습니다. 소비자/액세스 토큰을 생성하려면 앱의 ID와 비밀은 물론 사용자의 액세스 토큰과 비밀 토큰이 필요합니다. 나는 이것이 내가 트위터 보석의 오버 헤드가 필요 없다고 생각한만큼 구현하기에 쉽다는 것을 알았다.

module User::Social 

    def self.included(base) 
    base.instance_eval do 
     include Rails.application.routes.url_helpers 
    end 
    end 


    def promote_activity(type, profile) 
    url = short_profile_url(profile, :host => Conf.domain) 
    tw_client.request(:post, "http://api.twitter.com/1/statuses/update.json", :status => I18n.translate("tweets.#{type}", :profile => profile.to_s, :url => url)) 
    end 

    def tw_client 
    @tw_client ||= begin 
     consumer = OAuth::Consumer.new(Conf.tw_app_id, Conf.tw_secret, :site => 'http://api.twitter.com') 
     OAuth::AccessToken.from_hash(consumer, {:oauth_token => self.access_token, :oauth_token_secret => self.secret_token}) 
    end 
    end 
end 


class User < AR::Base 
    include User::Social 
end 
+1

이것은 훌륭하지만 당신이 멍청한 놈을 조금이라도 명확하게 할 수 있는지 궁금합니다. 1) Omniauth gem을 설치해야한다고 가정합니다. 2) 구성에 대해 "Conf"가 짧습니까? 내가 창조 한 것입니까? 그래서 나는 consumer_key와 consumer_secret을 설정 파일에 넣어야 만합니까? 어느 것? – Leahcim

+0

답장이 없어서 죄송합니다. 최근에 많이 여행했습니다. Conf는 내 Settingslogic 클래스입니다. 익숙하지 않은 경우 체크 아웃하는 것이 좋습니다. 당신은 Oauth만을 필요로하지만, Oauth는 Omniauth의 의존성 때문에 당신이 설정 될 것입니다. – mnelson