Rails - разработка, нечувствительность к регистру электронной почты - PullRequest
18 голосов
/ 10 ноября 2010

Я использую Devise с учетными данными для входа: электронная почта / пароль - без имен пользователей

Я только что заметил, что процесс входа в систему чувствителен к регистру для электронных писем.поэтому, если вы зарегистрируетесь с bob@apPle.com, а затем попытаетесь войти с Bob@apple.com, вы получите ошибку.Очень запутанно.

Как я могу сделать так, чтобы пользователи входили в систему, используя их адрес электронной почты / пароль, а письмо не чувствительно к регистру?

Ответы [ 5 ]

64 голосов
/ 06 сентября 2011

Вы можете легко решить проблему, как показано ниже.

# config/initializers/devise.rb
Devise.setup do |config|
  config.case_insensitive_keys = [:email, :username]
end
10 голосов
/ 10 ноября 2010

Один из вариантов - переопределить метод поиска, используемый devise. Что-то вроде:

# User.rb
before_save do
  self.email.downcase! if self.email
end

def self.find_for_authentication(conditions) 
  conditions[:email].downcase! 
  super(conditions) 
end 
5 голосов
/ 22 декабря 2010

Я добавил это в свою модель User, чтобы сохранить ее с учетом регистра, но сделать ее без учета регистра при входе в систему:

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

Работает на Heroku.

Кстати, это временное исправление, поскольку проблема была решена, и это будет поведение по умолчанию в Devise 1.2. Подробнее см. этот запрос на получение .

0 голосов
/ 25 октября 2013
0 голосов
/ 22 января 2011

У меня также было какое-то решение, которое делает работу с электронной почтой независимой от регистра для всех контроллеров Devise (функциональность):

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

Я знаю, что это не лучшее решение: оно включает в себя другие контроллеры других моделей и выполняет код, который им не нужен. Но это было просто временное решение, и оно работает (по крайней мере, для меня;)).

Кевин и Андрес, спасибо за ваши ответы. Это действительно хорошие решения и полезные. Я хотел проголосовать за них, но у меня пока недостаточно репутации. Итак, я просто говорю «спасибо» вам. ;)

Дожидаемся Devise 1.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...