簡體   English   中英

如何使用 oauth gem 和 twitter 1.0.0 gem 對 Rails 應用程序中的用戶進行身份驗證?

[英]How do I authenticate users in a Rails app with the oauth gem and twitter 1.0.0 gem?

Jnunemaker 剛剛更新了他的 twitter gem (https://github.com/jnunemaker/twitter) 並刪除了 Twitter::Oauth 類。 我的代碼看起來不像他的例子,所以我在更新它時遇到了問題。 這是我的代碼在 twitter 0.9 gem 中的樣子:

用戶控制器

def oauth
  consumer = Twitter::OAuth.new('mykey','mysecret')
  request_token = consumer.request_token  
  session[:request_token] = request_token.token  
  session[:request_token_secret] = request_token.secret
  redirect_to 'http://api.twitter.com/oauth/authorize?oauth_token='+request_token.token
end

def callback
  consumer = Twitter::OAuth.new('mykey','mysecret')
  atoken, asecret = oauth.authorize_from_request(session[:request_token], session[:request_token_secret], params[:oauth_verifier])  
  consumer.authorize_from_access(atoken,asecret)
  user = Twitter::Base.new(consumer).verify_credentials

  #and then I create a new user in my application, with attributes such as the user's follower count, etc
end

這是我嘗試更改此代碼的示例:

用戶控制器

def oauth
  consumer = OAuth::Consumer.new("mykey", "mysecret", :site => "siteurl")
  request_token = consumer.get_request_token
  session[:request_token] = request_token.token  
  session[:request_token_secret] = request_token.secret
  redirect_to 'http://api.twitter.com/oauth/authorize?oauth_token='+request_token.token
end

def callback
  consumer = OAuth::Consumer.new("mykey", "mysecret", :site => "siteurl")
  request_token = session[:request_token]
  atoken = OAuth::RequestToken.new(consumer, request_token.token, request_token.secret).get_access_token(:oauth_verifier => params[:oauth_verifier])
  consumer.authorize_from_access(atoken)
  user = Twitter::Client.new(consumer).verify_credentials

文件

...
gem 'oauth'

我確定我的回調方法有很多問題,但奇怪的是,當我在本地運行時,我的 oauth 方法工作正常,但是當我嘗試從我的實時(使用 heroku 部署)版本。

如果您現在無法使用它,我已經能夠將 Omniauth gem 與 Twitter gem 一起使用。 Omniauth 非常容易設置。

要使用 Twitter gem,只需在 Omniauth 回調完成后獲取訪問令牌信息:

token = omniauth['credentials']['token'], 
secret = omniauth['credentials']['secret']

然后在使用 Twitter gem 方法之前設置 Twitter gem 配置設置

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

我很幸運

Authlogic + AuthLogic 連接。

我不確定您是否需要手動實現 oauth,但該 gem 可能值得研究。

https://github.com/viatropos/authlogic-connect

我發現 oauth 提供商的唯一問題是,如果無法識別回調 url,它們有時會提供糟糕的錯誤消息,這是在您獲取 api 密鑰的位置配置的。

-肯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM