4

Warden (別の auth gem) に基づく Ruby の認証 gem である Devise は、認証戦略として Twitter Oauth をサポートしていませんが、Warden はサポートしています。Devise 内で Warden Twitter Oauth 戦略を使用する方法はありますが、私にはわかりません。デバイス構成ファイルで次のブロックを使用しています。

  config.warden do |manager|
       manager.oauth(:twitter) do |twitter|
          twitter.consumer_secret = <SECRET>
          twitter.consumer_key  = <KEY>
          twitter.options :site => 'http://twitter.com'
       end
       manager.default_strategies.unshift :twitter_oauth
  end

しかし、私はあらゆる種類のエラーメッセージを受け取り続けています。これを機能させる方法を知っている人はいますか?ここでやるべきことは他にもあると思います (Warden と通信するための新しいリンク/ルートを構成する、Devise User モデルに属性を追加するなど) が、それらが何であるかわかりません。助けてください。

4

4 に答える 4

4
# Needed gems. Add to your Gemfile if you are using Rails3.  
gem 'devise'
gem 'warden_oauth'

#models/user.rb
devise :token_authenticatable, :oauthable # <-- Must have these

#/config/initializers/devise.rb
require 'warden_oauth'
config.warden do |manager|
  manager.oauth(:twitter) do |twitter|
    twitter.consumer_secret = '<SECRET>'
    twitter.consumer_key  = '<CONSUMER KEY>'
    twitter.options :site => 'http://twitter.com'
  end
  manager.default_strategies(:scope => :user).unshift :twitter_oauth
end

Warden::OAuth.access_token_user_finder(:twitter) do |access_token|
  User.find_or_create_by(:token => access_token.token, :secret => access_token.secret).tap do |user|
    #... 
  end
end

# Link to "Login With Twitter" somewhere in your view
<%= link_to( "Login With Twitter", user_session_path(:warden_oauth_provider => 'twitter') ) %>
于 2010-08-07T20:11:51.123 に答える
3

Omniauthはこれを簡単にします。DeviseでのOmniauthの使用に関するRailscastがあります(パート1パート2)。

于 2010-12-01T20:09:24.453 に答える
0

このソリューション機能します。:warden_oauth_provider => 'twitter' を指定するときに、保護されたアクションを呼び出していることを確認する必要があります。そうしないと、Rails は単純にそれを無視します。

上記の例を使用するには、リンクを次のように変更します。

<%= link_to( "Login With Twitter", user_session_path(:warden_oauth_provider => 'twitter'), :method => :post ) %>
于 2010-10-01T16:28:15.893 に答える
0

Twitter という名前のクラスまたはモジュールを定義しているかどうかを確認してみてください (スクリプト/コンソールを実行してから Twitter と入力すると、これを確認できます)。

于 2011-03-24T06:41:43.180 に答える