2011-07-10 10 views
8

Estoy usando Devise con Omniauth para que los usuarios inicien sesión en mi aplicación con Facebook. Usé los tutoriales de Railscast para ponerlo en funcionamiento.Devise Omniauth "encrypted_password may not null" para el nuevo usuario

Si un usuario ya es miembro de mi sitio, autenticarse a través de Facebook funciona bien. El problema aparece al autenticar a un nuevo usuario con Facebook. Cuando se trata de crear un nuevo usuario para mi modelo de Usuario, aparece el error "users.encrypted_password may not any NULL". No puedo encontrar la forma de pasar la contraseña al modelo de usuario de la información de Facebook.

Esto es lo que tengo:

authentations_controller.rb

class AuthenticationsController < ApplicationController 
def index 
    @authentications = current_user.authentications if current_user 
end 

def create 
    omniauth = request.env["omniauth.auth"] 
    authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid']) 
if authentication 
    flash[:notice] = "Signed in successfully." 
    sign_in_and_redirect(:user, authentication.user) 
elsif current_user 
    current_user.authentications.create!(:provider => omniauth['provider'], :uid => omniauth['uid']) 
    flash[:notice] = "Authentication successful." 
    redirect_to authentications_url 
else 
    user = User.new 
    user.apply_omniauth(omniauth) 
    if user.save 
    flash[:notice] = "Signed in successfully." 
    sign_in_and_redirect(:user, user) 
    else 
    session[:omniauth] = omniauth.except('extra') 
    redirect_to new_user_registration_url 
    end 
    end 
end 

user.rb

def apply_omniauth(omniauth) 
    self.email = omniauth['user_info']['email'] if email.blank? 
    authentications.build(:provider => omniauth['provider'], :uid => omniauth['uid']) 
end 


def password_required? 
    (authentications.empty? || !password.blank?) && super 
end 

Cualquier ayuda sería grande, gracias de antemano!

Respuesta

13

Agregue: contraseña => Devise.friendly_token [0,20] al crear un nuevo usuario de facebook omniauth.

Creo que Devise está esperando algo en el campo de contraseña para crear un usuario. Como no hay una contraseña al hacer Facebook oauth (al menos no al lado de su aplicación), solo necesita crear una contraseña ficticia como se muestra arriba.

ver este para obtener más información: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

+1

Muchas gracias, yo había tratado de implementar esto antes, pero al parecer de forma incorrecta. Todo esta funcionando bien ahora. Esperemos que ese enlace pueda ayudar a alguien más. – looloobs

+0

Esto también me ayudó con google_oauth2 –

+1

y podría un usuario saber cuál es la contraseña? –

Cuestiones relacionadas