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.
Devise aborda el problema aquí:
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