Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-Twitter-Gem-Omniauth_Ruby On Rails_Ruby_Twitter_Omniauth - Fatal编程技术网

Ruby on rails Rails-Twitter-Gem-Omniauth

Ruby on rails Rails-Twitter-Gem-Omniauth,ruby-on-rails,ruby,twitter,omniauth,Ruby On Rails,Ruby,Twitter,Omniauth,我在使用omniauth和twitter gem生成推文时遇到问题 我一直在使用这个教程 我可以使用twitter登录,生成身份验证,但我不能更新推文 current_user.twitter.update("My Rails 3 App with Omniauth, Devise and Twitter") 这一行抱怨方法更新 关于上面的教程,让我感到困惑的是,在开始时,他们生成了一个迁移来将机密存储在身份验证中,但在教程后面的任何时候都没有提到更改任何代码以将机密写入数据库 我的理解是,这

我在使用omniauth和twitter gem生成推文时遇到问题

我一直在使用这个教程

我可以使用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

如果你只需要在twitter上发帖,那么完全放弃twitter gem可能会更容易。消费者/访问令牌生成需要应用id和密码以及用户的访问和密码令牌。我发现这很容易实现,所以我认为twitter gem的开销是不必要的

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
模块用户::社交
def自带(基本)
base.instance\u eval do
包括Rails.application.routes.url\u帮助程序
结束
结束
def促销活动(类型、配置文件)
url=short\u profile\u url(profile,:host=>Conf.domain)
tw_客户端请求(:post,“http://api.twitter.com/1/statuses/update.json,:status=>I18n.translate(“tweets.{type},:profile=>profile.to_s,:url=>url))
结束
def tw_客户端
@tw|U客户机| |=开始
consumer=OAuth::consumer.new(Conf.tw\u app\u id,Conf.tw\u secret,:site=>'http://api.twitter.com')
OAuth::AccessToken.from_hash(使用者,{:OAuth_token=>self.access_token,:OAuth_token\u secret=>self.secret_token})
结束
结束
结束
类用户
你还在用twitter gem做其他事情吗?这很好,但我想知道你是否可以澄清一下。1) 我假设我需要安装Omniauth gem?2) “Conf”是config的缩写吗?这是我创造的吗?所以我必须把consumer_密钥和consumer_秘密放在一个配置文件中?哪一个?很抱歉没有回复-我最近经常出差。Conf是我的Settingslogic类,如果您不熟悉它,我建议您签出它。您只需要Oauth,但由于Oauth是Omniauth的依赖项,因此需要设置它。