tutorial rails hacer español current_user create como ruby-on-rails facebook devise

ruby on rails - hacer - Rails 3 using Devise: ¿Cómo permitir que alguien inicie sesión usando su cuenta de Facebook?



login rails (7)

Tengo una aplicación de Rails 3 que usa Devise para la autenticación. Ahora necesito permitir que alguien inicie sesión usando su cuenta de Facebook. Creo que esto se llama Facebook Connect, pero también escuché el término Facebook Graph API, así que no estoy seguro de cuál estoy pidiendo.

¿Qué debo hacer para integrar Facebook Connect con Devise?

Solución:

Esta pregunta es bastante antigua ahora. Hace un año, Devise v1.2 introdujo el soporte OmniAuth . Ahora, Devise está en v2.1 (al momento de escribir esto) y usar OmniAuth es aún más fácil. Aquí hay un gran tutorial de la wiki de Devise sobre el uso de la gema omniauth-facebook con Devise para permitir el inicio de sesión utilizando Facebook .

Consulte también este excelente tutorial sobre el registro de su aplicación y el trabajo con la API Graph de Facebook .



Devise 1.2 ahora viene con soporte de inicio de sesión de Facebook usando omniauth y funciona con Rails 3.0. Mira la entrada de la wiki .


En mi aplicación, uso omniauth, que creo que salió un poco después de que esta pregunta fue respondida.

OmniAuth



Revisé la página de github de diseño para ver qué estaban haciendo. Ese proyecto se está moviendo bastante rápido y, como ocurre, tienen compatibilidad para Facebook, entre otras cosas. Mira la sección en OAuth2. Usan github como ejemplo, pero sería lo mismo para facebook y mencionan las diferencias. Creo que este es el camino a seguir, las gemas de terceros para diseñar no se mueven tan rápido como lo hacen los rieles. Aclamaciones.

Vaya, aquí está el enlace Devise

Editar

Por supuesto, hice muy poca codificación aquí, la mayoría fue con el valor predeterminado, así que aquí va:

Crea una nueva aplicación y agrega estas gemas al gemfile.

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

Ejecute la instalación del paquete, luego estos comandos lo llevarán a un modelo básico de autenticación de usuario.

rails generate devise:install rails generate devise User

En config / initializers / devise.rb descomentar / modificar estos. Mira el último párrafo sobre dónde obtienes app_key y el secreto de facebook.

config.oauth :facebook, ''app_key'', ''secret'', :site => ''https://graph.facebook.com'', :authorize_path => ''/oauth/authorize'', :access_token_path => ''/oauth/access_token''

Este debería ser su modelo de usuario.

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 usa una raíz: to => "something # here", así que creé un controlador doméstico con una acción de índice y lo usé para rootear la aplicación. Pero no importa eso. Lo puse en layout / application.html.erb para tener las rutas básicas 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 prácticamente se ocupa de todo lo demás para nosotros. Lo que sí debes hacer es obtener tu app_key y el secreto de facebook (usado en el archivo de configuración devise.rb). Este enlace debería ayudarte a avanzar. http://developers.facebook.com/setup


Solo usé la solución de Hugo casi sin problema. Aquí está el código User.rb que tuve que usar:

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

Las cosas cambiaron en este código:

  • el nombre está en attr_accessible (no olvides agregar un campo de nombre al usuario)
  • cambió la decodificación JSON