Ruby on rails 如何使用oauth gem和twitter 1.0.0 gem对Rails应用程序中的用户进行身份验证?

Ruby on rails 如何使用oauth gem和twitter 1.0.0 gem对Rails应用程序中的用户进行身份验证?,ruby-on-rails,twitter,oauth,twitter-gem,Ruby On Rails,Twitter,Oauth,Twitter Gem,JnueMaker刚刚更新了他的twitter gem(https://github.com/jnunemaker/twitter)并删除了Twitter::Oauth类。我的代码看起来不像他的示例,所以我在更新它时遇到了问题。以下是我的代码在使用twitter 0.9 gem时的外观: 用户控制器 下面是我尝试更改此代码的示例: 用户控制器 Gemfile 我确信我的回调方法中有很多错误,但有一件奇怪的事情是,当我在本地运行时,我的oauth方法工作正常,但当我从live(与heroku一起部

JnueMaker刚刚更新了他的twitter gem(https://github.com/jnunemaker/twitter)并删除了Twitter::Oauth类。我的代码看起来不像他的示例,所以我在更新它时遇到了问题。以下是我的代码在使用twitter 0.9 gem时的外观:

用户控制器 下面是我尝试更改此代码的示例:

用户控制器 Gemfile
我确信我的回调方法中有很多错误,但有一件奇怪的事情是,当我在本地运行时,我的oauth方法工作正常,但当我从live(与heroku一起部署)版本尝试时,会出现“502坏网关”错误。

我在这方面运气不错

Authlogic+Authlogic连接

我不确定您是否需要手动实现oauth,但是gem可能值得研究

我在oauth提供程序中发现的唯一问题是,如果无法识别回调url,它们有时会提供错误消息,而回调url是在获取api密钥的位置配置的


-肯

如果你不能让它与你现在拥有的一起工作,我已经能够将Omniauth gem与Twitter gem一起使用

要使用Twitter gem,只需在Omniauth回调完成后获取访问令牌信息:

token = omniauth['credentials']['token'], 
secret = omniauth['credentials']['secret']
然后,在使用twittergem方法之前,只需设置twittergem配置设置

Twitter.oauth_token = token
Twitter.oauth_token_secret = secret

Twitter.home_timeline.first.text

(如果尚未在初始值设定项文件中设置,则必须配置Twitter gem consumer_key和consumer_key_secret…)

您在示例中已经接近成功。控制器操作的正确代码如下所示:

  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

您是否使用代理(即Heroku的Apigee附加组件)?否。我使用heroku gem你能直接使用access_令牌发出请求吗?i、 e.访问令牌请求(:get“”)您是否在routes.rb中定义了“/auth/:provider/callback”路由?听起来您得到了正确的重定向。注销您的Twitter帐户,然后尝试登录/auth/Twitter。然后它会将您发送到Twitter。下面是另一个设置OmniAuth的示例,我正在尝试,但由于某种原因,它仍然不起作用-在我转到myapp/auth/twitter它重定向到myapp/auth/twitter/callback?oauth_token=xxxx&oauth_verifier=xxxx。我认为这应该发生在twitter api网站上。知道为什么会发生这种情况吗?在我的twitter应用程序的设置页面上,在oauth 1.0a设置下,它说:oauth 1.0a集成需要更多的工作。这可能有什么问题吗g怎么办?
token = omniauth['credentials']['token'], 
secret = omniauth['credentials']['secret']
Twitter.oauth_token = token
Twitter.oauth_token_secret = secret

Twitter.home_timeline.first.text
  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