Rails 3 za pomocą Devise: jak zezwolić komuś na zalogowanie się za pomocą konta Facebook?
Mam aplikację Rails 3 używającą Devise do uwierzytelniania. Teraz muszę pozwolić komuś zalogować się za pomocą konta Facebook. Chyba Facebook Facebook Connect, ale słyszałem również termin Facebook Graph API, więc nie jestem pewien, który z nich pytam.
Co muszę zrobić, aby zintegrować Facebook Connect z Devise?
Rozwiązanie:
To pytanie jest już dość stare. Rok temu Devise v1.2 wprowadził obsługę OmniAuth . Teraz Devise jest w wersji 2.1 (w chwili pisania tego tekstu) i korzystanie z OmniAuth jest jeszcze łatwiejsze. Poniżej znajduje się świetny samouczek z Devise wiki na temat za pomocą klejnotuomniauth-facebook
z Devise, aby umożliwić logowanie za pomocą Facebook.
Sprawdź również ten świetny samouczek na temat rejestracji aplikacji i pracy z Facebook Graph API .
7 answers
Devise 1.2 jest teraz wyposażony w obsługę logowania na facebook ' u przy użyciu omniauth i działa z Rails 3.0. Sprawdź wpis wiki .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-31 04:57:58
Sprawdziłem stronę devise github, aby zobaczyć, co robią. Ten projekt porusza się dość szybko i jak to się dzieje, że mają wsparcie dla facebook connect między innymi. Sprawdź sekcję OAuth2. Używają Githuba jako przykładu, ale to samo byłoby z facebook ' em i wspominają o różnicach. Myślę, że jest to droga, perełki innych firm dla devise nie poruszają się tak szybko, jak devise lub rails. Zdrowie.
UPS oto link http://github.com/plataformatec/devise
Edit
Oczywiście zrobiłem bardzo mało kodowania tutaj głównie poszedł z domyślnym, więc tutaj idzie:
Utwórz nową aplikację i dodaj te klejnoty do pliku gemfile.
gem 'devise', :git => 'git://github.com/plataformatec/devise.git'
gem 'oauth2', :git => 'git://github.com/intridea/oauth2.git'
Uruchom bundle install, a następnie te polecenia wprowadzą podstawowy model uwierzytelniania użytkownika.
rails generate devise:install
rails generate devise User
W config/initializers / devise.RB uncomment / modify these. Spójrz na ostatni akapit, skąd masz app_key i secret od facebook.
config.oauth :facebook, 'app_key', 'secret',
:site => 'https://graph.facebook.com',
:authorize_path => '/oauth/authorize',
:access_token_path => '/oauth/access_token'
To powinien być twój model użytkownika.
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 używa root :to = > "something#here", więc stworzyłem kontroler domowy z akcją index i użyłem go do rootowania aplikacji. Ale nieważne. Umieściłem to w layout/aplikacji.html.erb tak, że miałem podstawowe trasy 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 dba o Wszystko inne. To, co musisz zrobić, to uzyskać app_key i secret z facebook (używane w devise.RB config plik). Ten link powinien ci pomóc. http://developers.facebook.com/setup Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-01 00:46:04
W mojej aplikacji używam omniauth, który myślę, że wyszedł trochę po odpowiedzi na to pytanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-10 17:50:42
This blog post did it for me. Spójrz na to.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-03 01:03:28
Po prostu użyłem rozwiązania Hugo bez prawie żadnego problemu. Oto użytkownik.kod rb, którego musiałem użyć:
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
Rzeczy się zmieniły w tym kodzie:
- nazwa jest w attr_accessible (nie zapomnij dodać pola nazwa do użytkownika)
- zmieniono dekodowanie JSON
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-09 21:25:42
Http://github.com/grimen/devise_facebook_connectable
Ten klejnot na GitHubie jest dość prosty. Warto spróbować!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-28 00:30:50
Oto mała aplikacja z integruje się z Devise + Twitter + Facebook + Linkedin + Google + Github. Wszystko w jednym miejscu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-27 14:57:24