2011-11-12 12 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") 

この行は、メソッドの更新に関して不平を言っています。

上記のチュートリアルについて私を混乱させるのは、当初は認証で秘密を格納するための移行を生成することですが、チュートリアルの後半では、コードを変更してデータベースに秘密を書き込むという言葉はありません。

私の理解では、シークレットはセッションCookieに格納されている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") 

Twitterの方法は、私は問題を説明するで素晴らしいじゃないごめんなさいTwitterクライアント

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

Twitterに投稿する必要がある場合は、Twitterの宝石を完全に捨てる方が簡単かもしれません。消費者/アクセストークンの生成には、アプリの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

これは素晴らしいですが、私はあなたがnoobのためのビットを明確にできるかどうか疑問に思っています。 1)Omniauth gemをインストールする必要があると思いますか? 2)configの "Conf"は短いですか?それは私が創造したものですか?だから、私はconsumer_keyとconsumer_secretを設定ファイルに入れなければならないのですか?どれ? – Leahcim

+0

私は返事の不足のために申し訳ありません - 私は最近多くの旅行をしてきました。 Confは私のSettingslogicクラスです。あなたがそれに精通していないかどうか確認することをお勧めします。あなたはOauthだけが必要ですが、OauthはOmniauthの従属者なので設定されます。 – mnelson

関連する問題