Rails 3アプリケーションを使用して、認証に Devise を使用しています。今度は、Facebookアカウントを使用してログインを許可する必要があります。 Facebook Graph APIという言葉も聞いたことがあるので、どちらを求めているのかわかりません。
Facebook ConnectとDeviseを統合するには、何をする必要がありますか?
この質問はかなり古いです。 1年前、Devise v1.2は OmniAuth サポートを導入しました。 Deviseはv2.1(この記事の執筆時点)であり、OmniAuthの使用はさらに簡単です。 Facebookを使用したサインインを許可するためにDeviseでomniauth-facebook
gemを使用 のDevise wikiからの素晴らしいチュートリアルです。
アプリケーションの登録とFacebook Graph APIの操作 に関するこの素晴らしいチュートリアルもご覧ください。
Devise 1.2にはomniauthを使用したfacebookログインサポートが付属し、Rails 3.0。 wikiエントリ を確認してください。
Devise githubページをチェックして、彼らが何をしていたかを確認しました。このプロジェクトは非常に高速に進行しており、たまたま、Facebook Connectをサポートしています。 OAuth2のセクションをご覧ください。彼らはgithubを例として使用していますが、facebookでも同じことであり、違いに言及しています。これが進むべき道だと思う、deviseのためのサードパーティの宝石はdeviseやRails do。乾杯。
リンクがあります http://github.com/plataformatec/devise
編集
もちろん、ここではほとんどコーディングしていませんでしたが、ほとんどがデフォルトで行われたため、次のようになります。
新しいアプリを作成し、これらのgemをgemfileに追加します。
gem 'devise', :git => 'git://github.com/plataformatec/devise.git'
gem 'oauth2', :git => 'git://github.com/intridea/oauth2.git'
バンドルインストールを実行すると、これらのコマンドで基本的なユーザー認証モデルを使用できます。
Rails generate devise:install
Rails generate devise User
Config/initializers/devise.rbでこれらのコメントを解除/変更します。 Facebookからapp_keyとsecretを取得する場所に関する最後の段落を見てください。
config.oauth :facebook, 'app_key', 'secret',
:site => 'https://graph.facebook.com',
:authorize_path => '/oauth/authorize',
:access_token_path => '/oauth/access_token'
これがユーザーモデルになります。
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable, :lockable, :timeoutable and :oauthable
devise :database_authenticatable, :oauthable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
# Get the user email info from Facebook for sign up
# You'll have to figure this part out from the json you get back
data = ActiveSupport::JSON.decode(access_token)
if user = User.find_by_email(data["email"])
user
else
# Create an user with a stub password.
User.create!(:name => data["name"], :email => data["email"], :password => Devise.friendly_token)
end
end
end
Deviseはルート:to => "something#here"を使用するので、インデックスアクションを持つホームコントローラーを作成し、それを使用してアプリケーションをルート化します。しかし、決して気にしないでください。これをlayout/application.html.erbに配置して、基本的なsign_n sign_outルートを用意しました。
<span>
<%- if user_signed_in? %>
<%= "Signed in as #{current_user.full_name}. Not you?" %>
<%= link_to 'Sign out', destroy_user_session_path %>
<%- else %>
<%= link_to 'Sign in', new_user_session_path %>
<%- end %>
</span>
Deviseが他のすべての面倒を見てくれます。ただし、必要なのは、facebookからapp_keyとsecretを取得することです(devise.rb構成ファイルで使用)。このリンクはあなたを元気づけるはずです。 http://developers.facebook.com/setup
私のアプリではomniauthを使用していますが、これはこの質問に答えた後少し出てきたと思います。
Hugoソリューションを使用したところ、ほとんど問題はありませんでした。ここに私が使用しなければならなかったUser.rbコードがあります:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable, :lockable, :timeoutable and :oauthable
devise :database_authenticatable, :oauthable
# Setup accessible (or protected) attributes for your model
attr_accessible :name, :email, :password, :password_confirmation, :remember_me
def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
# Get the user email info from Facebook for sign up
# You'll have to figure this part out from the json you get back
data = ActiveSupport::JSON.decode(access_token.get('https://graph.facebook.com/me?'))
logger.info("received from Facebook: #{data.inspect}")
if user = User.find_by_email(data["email"])
user
else
# Create an user with a stub password.
User.create!(:name => data["name"], :email => data["email"], :password => Devise.friendly_token)
end
end
end
このコードの変更点:
これは ブログ投稿 でした。それを見てください。
http://github.com/grimen/devise_facebook_connectable
Githubのこのgemは非常に簡単です。試してみる価値!