2013-06-20 6 views
2

Я использую программу для управления учетными записями пользователей моего приложения. Пока все работает неплохо, но я наткнулся на то, что я нахожу очень странным. В основном произошло то, что я добавил следующий код в мою модель пользователя:проверка валидации пароля подтверждение разработки

validates :password, { confirmation: true, length: { in: 6..20 } } 
validates :username, { uniqueness: true, length: { in: 3..25 } } 

На первый взгляд это, казалось, работало нормально. Невозможность ввода достоверной информации не позволит сохранить информацию о пользователе в базе данных. К сожалению, это как-то сломало подтверждение электронной почты для разработки. Devise по-прежнему отправляет электронное письмо при регистрации, но ссылка на подтверждение не работает так, как раньше. Вдруг, что происходит, он отправляет меня на страницу, где я могу повторно запросить информацию о подтверждении (несмотря на то, что мне вообще этого не сказали). Он также жалуется (через флеш-сообщение), что мой пароль не может быть «пустым» и что пользователь не был сохранен. Это делает нулевой смысл, поскольку пользователь уже был сохранен до того, как была нажата кнопка подтверждения (с действительным значением pw тоже). И на самом деле это удалось сохранить, поскольку я обнаружил, что вручную проверял таблицу базы данных.

То, что я собираюсь из этого, состоит в том, что он, вероятно, пытается изменить определенные столбцы в таблице пользователей, такие как confirm_email и confirm_at и т. Д. Но почему-то он также пытается поставить новый pw в то же время, что абсолютно не то, что он должен делаю. Почему он перенаправляет меня на эту страницу, где я могу отправить письмо с подтверждением, также полностью вне меня.

Что делать, чтобы решить мою проблему? Я не хочу использовать: validatable, но, скорее, свою собственную проверку без полного разрушения моего проекта. Вот некоторые дополнительная информация:

рельсы 3.2.12
рубин 1.9.3p392 Разрабатывают 2.2.3

журнала:

работы GET "/ пользователи/подтверждение confirmation_token = ojx35QawQdHSWi655mru?" Для 127.0. 0.1 в 2013-06-20 17:01:12 +0200 Обработка Devise :: ConfirmationsController # показать как HTML Параметры: {"confirm_token" => "ojx35QawQdHSWi655mru"} Пользовательская нагрузка (0.3мс) SELECT "users". * FROM «пользователи» WHERE «пользователи». «Confirm_token» = 'ojx35QawQdHSWi655mru' LIMIT 1 (0.1ms) BEGIN У пользователя есть (0.2ms) SELECT 1 AS one FROM "users" WHERE ("users". "Username" = 'what the heck' AND "users". "Id"! = 22) LIMIT 1 (0.1ms) ROLLBACK Изображеное/общее/_links.erb (0.4ms) Представлено dev/confirm.html.erb в макетах/приложении (2.1ms) Завершено 200 OK в 14ms (Просмотров: 9.0мс | ActiveRecord: 0.8ms)

ответ

7

Это может быть не ваша проблема, но изобрести уже проверяет пароль для вас в

config/initializers/devise.rb

с

config.password_length = 8..128

Попробуйте изменить что вместо добавления сначала для модели пользователя. (Или удалить)

+0

для меня эта линия активна с теми же номерами, но все-таки я могу зарегистрироваться, используя 2 пароль длины символов. Кто-нибудь знает, почему? – Gediminas

+2

Вы перезапустили свой сервер после расторжения? – lilwupster

+0

Да. Для меня это работает только тогда, когда в модель добавляются правила проверки ... – Gediminas

0

редактировать эту строку в вашем devise.rb

config.password_length = 6..20 

Это выше линии встроенной конфигурации devise.The длины пароля установлено 8 128 в orignal.The изобрести пользователя нет необходимости писать пользовательские проверки подлинности пользователя.Для, например, для формата электронной почты можно установить

config.email_regexp = /\A[^@][email protected][^@]+\z/ 
+1

Ответы одной строки редко принимаются. Попробуйте отредактировать и объяснить * почему * этот ответ правильный, чтобы помочь OP учиться. – codeMagic

0

забыл запись в application_controller.rb в рельсах 4

before_action :configure_permitted_parameters, if: :devise_controller? protected 
def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up {|u|u.permit(:email,:password,:password_confirmation)} 
end 
Смежные вопросы