J'ai une application Rails 3 utilisant Devise pour l'authentification. Maintenant, je dois autoriser quelqu'un à se connecter en utilisant son compte Facebook. Je pense que cela s'appelle Facebook Connect, mais J'ai également entendu le terme Facebook Graph API, donc je ne sais pas lequel je demande.
Que dois-je faire pour intégrer Facebook Connect à Devise?
Cette question est assez ancienne maintenant. Il y a un an, Devise v1.2 a introduit le support OmniAuth . Maintenant, Devise est à la version 2.1 (au moment d'écrire ces lignes) et l'utilisation d'OmniAuth est encore plus facile. Voici un excellent tutoriel du wiki Devise sur en utilisant le omniauth-facebook
gem avec Devise pour autoriser la connexion via Facebook .
Consultez également ce super tutoriel sur enregistrement de votre application et utilisation de l'API Facebook Graph .
Devise 1.2 est désormais livré avec un support de connexion Facebook utilisant omniauth et fonctionne avec Rails 3.0. Consultez la entrée wiki .
J'ai vérifié la page Github de l'appareil pour voir ce qu'ils faisaient. Ce projet se déroule assez rapidement et il se trouve qu'ils ont un support pour la connexion Facebook entre autres. Consultez la section sur OAuth2. Ils utilisent github comme exemple, mais ce serait la même chose pour Facebook et ils mentionnent des différences. Je pense que c'est la voie à suivre, les gemmes tierces pour les appareils ne se déplacent pas aussi vite que l'appareil ou Rails do. Cheers.
Oups, voici le lien http://github.com/plataformatec/devise
Modifier
Bien sûr, j'ai fait très peu de codage ici, principalement avec la valeur par défaut, alors voici:
Créez une nouvelle application et ajoutez ces gemmes au gemfile.
gem 'devise', :git => 'git://github.com/plataformatec/devise.git'
gem 'oauth2', :git => 'git://github.com/intridea/oauth2.git'
Exécutez l'installation de l'ensemble, puis ces commandes vous permettent de démarrer avec un modèle d'authentification utilisateur de base.
Rails generate devise:install
Rails generate devise User
Dans config/initializers/devise.rb décommentez/modifiez ces derniers. Regardez le dernier paragraphe pour savoir où vous obtenez app_key et le secret de Facebook.
config.oauth :facebook, 'app_key', 'secret',
:site => 'https://graph.facebook.com',
:authorize_path => '/oauth/authorize',
:access_token_path => '/oauth/access_token'
Cela devrait être votre modèle d'utilisateur.
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 utilise une racine: to => "something # here", j'ai donc créé un contrôleur domestique avec une action d'index et l'ai utilisé pour rooter l'application. Mais peu importe. J'ai mis cela dans layout/application.html.erb afin d'avoir des routes sign_n sign_out de base.
<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 s'occupe à peu près de tout le reste pour nous. Ce que vous devez faire cependant, c'est récupérer votre clé_app et votre secret sur Facebook (utilisé dans le fichier de configuration devise.rb). Ce lien devrait vous aider à démarrer. http://developers.facebook.com/setup
Dans mon application, j'utilise omniauth, qui je pense est sorti un peu après la réponse à cette question.
Je viens d'utiliser la solution Hugo avec presque aucun problème. Voici le code User.rb que j'ai dû utiliser:
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
Les choses ont changé dans ce code:
Ce article de blog l'a fait pour moi. Donnez-lui un coup d'oeil.
http://github.com/grimen/devise_facebook_connectable
Ce joyau sur github est assez simple. Vaut le coup!