tutorial signup sign_in rails method instalar example ejemplos ruby-on-rails ruby-on-rails-3 devise

ruby on rails - signup - Rails-Devise, Insensibilidad de la caja de correo electrónico



devise wiki (5)

Estoy usando Devise con credenciales de inicio de sesión: correo electrónico / contraseña - sin nombres de usuario

Me di cuenta de que el proceso de inicio de sesión distingue entre mayúsculas y minúsculas para los correos electrónicos. entonces si te registras con [email protected], y luego tratas de iniciar sesión con [email protected], obtienes un error. Muy confuso.

¿Cómo puedo idear personas de registro con su correo electrónico / contraseña, y el correo electrónico no distingue entre mayúsculas y minúsculas?


Agregué esto a mi modelo de usuario para almacenarlo, pero lo distingue entre mayúsculas y minúsculas durante el inicio de sesión:

def self.find_for_database_authentication(conditions = {}) self.where("LOWER(email) = LOWER(?)", conditions[:email]).first || super end

Funciona en Heroku.

Por cierto, esto es solo una solución temporal, ya que el problema se ha resuelto y este será el comportamiento predeterminado en Devise 1.2. Ver esta solicitud de extracción para más detalles.



Puede solucionar el problema fácilmente como a continuación.

# config/initializers/devise.rb Devise.setup do |config| config.case_insensitive_keys = [:email, :username] end


También tuve alguna solución que trabajar con el correo electrónico no distingue entre mayúsculas y minúsculas para todos los controladores Devise (funcionalidad):

class ApplicationController < ActionController::Base ... ... prepend_before_filter :email_to_downcase, :only => [:create, :update] ... ... private ... ... def email_to_downcase if params[:user] && params[:user][:email] params[:user][:email] = params[:user][:email].downcase end end ... ... end

Sé que no es la mejor solución: involucra a otros controladores de otros modelos y ejecuta código que no es necesario para ellos. Pero fue solo improvisado y funciona (al menos para mí;)).

Kevin y Andres, gracias por tus respuestas. Es realmente buenas soluciones y útiles. Quería votar por ellos, pero todavía no tengo suficiente reputación. Entonces, solo les digo ''gracias''. ;)

Esperemos a Devise 1.2


Una opción es anular el método de búsqueda utilizado por idear. Algo como:

# User.rb before_save do self.email.downcase! if self.email end def self.find_for_authentication(conditions) conditions[:email].downcase! super(conditions) end