#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 и метод для входа в систему, восстановить исключение и просто перенаправить.