65 votes

Rails 3, à l'aide de Concevoir: Comment permettre à quelqu'un de se connecter en utilisant leur Facebook compte?

J'ai un Rails 3 application à l'aide de Concevoir pour l'authentification. Maintenant, j'ai besoin de permettre à quelqu'un de se connecter en utilisant leur Facebook compte. Je pense que cela s'appelle Facebook Connect, mais j'ai également entendu le terme Facebook API Graphique, donc je ne suis pas sûr de laquelle je vous demande.

Que dois-je faire pour intégrer Facebook se Connecter avec les Concevoir?

Solution:

Cette question est assez vieux maintenant. Il y a un an, de la conception de v1.2 introduit OmniAuth de soutien. Maintenant Concevoir est à v2.1 (à ce jour) et à l'aide de OmniAuth est encore plus facile. Voici un excellent tutoriel de le Concevoir wiki sur l'aide de l' omniauth-facebook gem à Concevoir pour permettre la connexion à l'aide de Facebook.

Également consulter cet excellent tutoriel sur l'enregistrement de votre demande et de travail avec le Facebook Graph API.

54voto

Hugo Points 2344

J'ai vérifié le concevoir github page pour voir ce qu'ils faisaient. Ce projet est en mouvement assez rapide et, comme il arrive d'avoir de l'aide pour facebook connect, entre autres choses. Consultez la section sur les OAuth2. Ils utilisent github comme un exemple, mais ce serait la même chose pour facebook et ils mentionnent des différences. Je pense que c'est le chemin à parcourir, troisième partie des pierres précieuses pour concevoir de ne pas se déplacer aussi vite que de l'élaboration ou de rails de le faire. Des acclamations.

Oups, voici le lien http://github.com/plataformatec/devise

Modifier

Bien sûr, j'ai fait très peu de codage ici surtout allé avec la valeur par défaut, donc voilà:

Créez une nouvelle application et ajouter ces gemmes pour le gemfile.

gem 'devise', :git => 'git://github.com/plataformatec/devise.git'
gem 'oauth2', :git => 'git://github.com/intridea/oauth2.git'

Exécuter la commande bundle install, ces commandes vous permet de vous avec une base d'authentification de l'Utilisateur modèle.

rails generate devise:install
rails generate devise User

Dans config/initializers/concevoir.rb décommenter/modifier. Regarder le dernier paragraphe de l'endroit 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'

Ce doit ê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

Concevoir utilise une racine : = > "quelque chose#ici" j'ai donc créé une maison contrôleur avec un indice d'action et utilisé que pour la racine de l'application. Mais passons sur le fait qu'. Je l'ai mis dans la mise en page/de l'application.html.erb alors que j'avais de base sign_n sign_out routes.

<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>

Concevoir à peu près prend soin de tout le reste pour nous. Ce que vous devez faire est d'obtenir votre app_key et le secret de facebook (utilisé dans les concevoir.rb fichier de config). Ce lien devrait vous aller. http://developers.facebook.com/setup

21voto

Yeameen Points 553

Concevoir 1.2 est désormais livré avec facebook connexion de support à l'aide de omniauth et travaille avec des Rails 3.0. Découvrez le wiki d'entrée.

8voto

alvin Points 466

Dans mon application, j'utilise omniauth, qui, je pense, est sorti un peu après que cette question a été répondu.

https://github.com/intridea/omniauth

6voto

Mike Williamson Points 6836

Ce blog a fait pour moi. Lui donner un look.

6voto

Chris Points 879

Juste utilisé Hugo solution avec presque pas de problème. Voici l'Utilisateur.rb code que j'ai eu à 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 :

  • le nom est en attr_accessible (n'oubliez pas d'ajouter un nom de domaine pour l'utilisateur)
  • changé décodage JSON

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X