2011-11-12 74 views
1

我在使用omniauth &叽叽喳喳的宝石产生鸣叫麻烦。Rails的Twitter的宝石Omniauth

我一直在使用本教程http://blog.assimov.net/post/2358661274/twitter-integration-with-omniauth-and-devise-on-rails-3

,我可以登录使用Twitter,产生的认证,但我不能更新微博。

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

您是否将twitter gem用于其他任何内容? – mnelson

回答

2

如果你只需要发布到twitter,完全可以放弃twitter gem。消费者/访问令牌生成需要的应用程序ID和秘密以及用户的访问和秘密令牌。我发现这是很容易实现,我认为Twitter的宝石的开销是没有必要的。

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宝石? 2)配置是否为“Conf”?这是我创造的东西吗?所以我必须将consumer_key和consumer_secret放在配置文件中?哪一个? – Leahcim

+0

我为缺乏答复的遗憾 - 我近来一直走了很多。 Conf是我的Settingslogic类,如果你不熟悉它,我建议检查一下。你只需要Oauth,但是因为Oauth是Omniauth的依赖,所以你会设置它。 – mnelson