Ответ 1
Теперь Devise 1.2 поставляется с поддержкой входа в facebook с использованием omniauth и работает с Rails 3.0. Проверьте запись в вики.
У меня есть приложение Rails 3, использующее Devise для аутентификации. Теперь мне нужно разрешить кому-либо войти в систему, используя свою учетную запись Facebook. Я думаю, что это называется Facebook Connect, но я также слышал термин Facebook Graph API, поэтому я не уверен, о чём я прошу.
Что мне нужно сделать, чтобы интегрировать Facebook Connect с Devise?
Этот вопрос сейчас довольно старый. Год назад Devise v1.2 представил OmniAuth поддержку. Теперь Devise находится на v2.1 (начиная с этой записи), и использование OmniAuth еще проще. Вот отличный учебник из вики Devise на с помощью omniauth-facebook
gem с помощью Devise, чтобы разрешить вход с помощью Facebook.
Также ознакомьтесь с этим замечательным руководством по регистрации вашего приложения и работы с API-интерфейсом Facebook.
Теперь Devise 1.2 поставляется с поддержкой входа в facebook с использованием omniauth и работает с Rails 3.0. Проверьте запись в вики.
Я проверил страницу разработчика github, чтобы узнать, что они сделали. Этот проект движется довольно быстро, и, как это бывает, у них есть поддержка для подключения facebook между прочим. Ознакомьтесь с разделом OAuth2. Они используют github в качестве примера, но это будет одно и то же для facebook, и они упоминают различия. Я думаю, что это путь, сторонние драгоценные камни для разработки не двигаются так быстро, как изобретатель или рельсы. Приветствия.
Здесь ссылка http://github.com/plataformatec/devise
Edit
Конечно, я очень мало кодировал здесь, в основном, по умолчанию, так что:
Создайте новое приложение и добавьте эти драгоценные камни в 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 и секрет из 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", поэтому я создал домашний контроллер с действием индекса и использовал его для запуска приложения. Но, не об этом. Я поместил это в 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>
Разработать в значительной степени забота обо всем остальном для нас. То, что вам нужно сделать, это получить ваш app_key и секрет из facebook (используется в файле конфигурации 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 довольно прост. Стоит сделать снимок!
Вот небольшое приложение с интеграцией с Devise + Twitter + Facebook + Linkedin + Google + Github. Все в одном месте.