У меня есть приложение Rails 3, использующее Devise для аутентификации. Теперь мне нужно разрешить кому-либо войти в систему, используя свою учетную запись Facebook. Я думаю, что это называется Facebook Connect, но я также слышал термин Facebook Graph API, поэтому я не уверен, какой из них я запрашиваю.
Что мне нужно сделать, чтобы интегрировать Facebook Connect с Разработать?
Этот вопрос сейчас довольно старый. Год назад в Devise v1.2 появилась поддержка OmniAuth . Сейчас Devise версии 2.1 (на момент написания этой статьи) и использование OmniAuth стало еще проще. Вот отличное руководство из вики Devise на с использованием гема omniauth-facebook
с Devise, чтобы разрешить вход через Facebook .
Также ознакомьтесь с этим великолепным учебным пособием по регистрации приложения и работе с API Graph Facebook .
http://github.com/grimen/devise_facebook_connectable
Эта жемчужина на github довольно проста. Стоит попробовать!
Я проверил страницу devise на github, чтобы узнать, чем они занимаются.Этот проект развивается довольно быстро, и, как оказалось, среди прочего у них есть поддержка Facebook Connect. Ознакомьтесь с разделом, посвященным OAuth2. Они используют github в качестве примера, но это было бы то же самое для facebook, и они упоминают различия. Я думаю, что это правильный путь, сторонние драгоценные камни для devise не движутся так быстро, как devise или rails. Ваше здоровье.
К сожалению, вот ссылка http://github.com/plataformatec/devise
Изменить
Конечно, я очень мало кодировал здесь, в основном использовал значение по умолчанию, так что вот:
Создать новое приложение и добавьте эти драгоценные камни в 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 раскомментируйте/измените их. Посмотрите на последний абзац, где вы берете app_key и secret от facebook.
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", поэтому я создал домашний контроллер с действием index и использовал его для рутирования приложения. Но неважно это. Я поместил это в 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 позаботится обо всем остальном за нас. Что вам нужно сделать, так это получить свой app_key и секрет из facebook (используется в конфигурационном файле devise.rb). Эта ссылка должна вас заинтересовать. http://developers.facebook.com/setup