#ruby-on-rails #ruby-on-rails-4 #ruby-on-rails-2 #clearance
#ruby-on-rails #ruby-on-rails-4 #ruby-on-rails-2 #Полная распродажа
Вопрос:
Работаю над обновлением старого приложения Rails 2.3 для использования Rails 4. Пока все работает просто отлично, за исключением того, что после обновления Clearance до последней стабильной версии я больше не могу входить в существующие учетные записи пользователей. Ошибки нет, кроме неправильного адреса электронной почты или пароля. Я также могу создавать новые учетные записи и входить в них просто отлично, но существующие недоступны, и я бы не хотел сбрасывать сотни паролей для пользователей, если это вообще возможно.
Я знаю, что Clearance начал использовать BCrypt вместо SHA1 в версиях, используемых после Rails 2.3, поэтому я установил config.password_strategy = Clearance::PasswordStrategies::SHA1
в своем /config/initializers/clearance.rb
, чтобы он использовал то же шифрование, с помощью которого были созданы учетные записи. Но это не решило проблему.
Есть предложения? Я чувствую, что где-то в старом приложении был установлен какой-то другой «секретный» ключ, который мне нужно перенести в новое приложение, чтобы расшифровка входа в систему работала, но я пока мало что знаю о таких вещах.
Спасибо!
Комментарии:
1. Вы читали руководство по обновлению? Внизу говорится, что вам нужно выполнить миграцию на адреса электронной почты с пониженным значением. Это может быть проблемой: github.com/thoughtbot/clearance/wiki/upgrading-clearance
2. @Sharagoz Спасибо, я даже не нашел эту страницу раньше, несмотря на то, что прочитал README. Я только что запустил миграцию вниз, но это пока не решило проблему. Я прочитаю остальное и удостоверюсь, что выполнил все остальное. Спасибо, что указали мне в этом направлении! Если вы можете придумать что-нибудь еще, я был бы признателен за помощь.
3. Я сам не использую clearence, поэтому, к сожалению, не могу вам больше помочь
Ответ №1:
Итак, у меня это работает, и хотя я не совсем понимаю, как конкретно это устраняет проблему, я хотел поделиться на случай, если это когда-нибудь поможет кому-то еще.
В /config/initializers/clearance.rb
я переключился с config.password_strategy = Clearance::PasswordStrategies::SHA1
на config.password_strategy = Clearance::PasswordStrategies::BCryptMigrationFromSHA1
.
Я использовал Clearance::Token.new
консоль Rails для создания новой remember_token
, а затем вручную обновил базу данных, чтобы у нужной мне учетной записи была эта remember_token
.
Сочетание этих двух факторов позволило мне получить доступ к старой существующей учетной записи пользователя, чего я раньше не мог. Я планирую написать быстрый скрипт, который заполнит все другие существующие учетные записи сгенерированным remember_token
. На GitHub Clearance было несколько обсуждений о повторном заполнении этих пользовательских remember_tokens, но запуск скрипта инициализации не сделал этого, когда я установил новый Clearance.
Если кто-нибудь хочет подробнее рассказать об этом и точно объяснить, почему это работает, пожалуйста, сделайте.