Исключение с паролем Devise is равно нулю

#ruby-on-rails #devise

#ruby-on-rails #разработка

Вопрос:

Я хочу, чтобы пользователи взаимодействовали с моим сайтом без необходимости создавать учетную запись, а затем позже создавать учетную запись (указать пароль, информацию об имени .. и т.д.), Если они хотят большего.

Это работает нормально, но если пользователь думал, что он создал учетную запись, а затем попытался войти в систему (вероятно, используя пароль, который они используют постоянно), Devise пропустит исключение:

 BCrypt::Errors::InvalidHash in Devise/sessionsController#create
  

Потому что пароль равен нулю. Если они пройдут регистрацию, а затем войдут снова, это сработает.

Я использую devise (1.2.0), Rails (3.0.4) и Ruby 1.9.2

Я имею в виду, что я могу обойти это, создав фиктивный пароль и указав поле, в котором указано, зарегистрировался ли пользователь (или проверьте, были ли предоставлены другие обязательные поля), затем сбросив пароль при фактической регистрации, но я думаю, что во всех случаях этого не следует делать с помощью вышеупомянутого исключения.

Могу ли я что-нибудь сделать / настроить, чтобы обойти проблему?

Ответ №1:

Вероятно, самый простой способ — это просто сгенерировать случайный пароль, используя что-то вроде Devise.friendly_token[0..20] но вы также можете переопределить контроллер Devise и метод для входа в систему, восстановить исключение и просто перенаправить.