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!
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
Esto también me ayudó con google_oauth2 –
y podría un usuario saber cuál es la contraseña? –