Мы поддерживаем немного необычную схему.Мы не требуем пароль при создании пользователя и используем password_resets, чтобы добавить пароль пользователю позже, по требованию.Проблема в том, что после создания пароля консоль указывает, что пароль действителен:
user.valid_password? 'test'<br>
=> true
, но в моем контроллере UserSessions @ user_session.save возвращает значение false, используя тот же пароль.Что я не вижу?
Кимбалл
ОБНОВЛЕНИЕ:
Предоставление более подробной информации, вот вывод при сохранении нового пароля:
Processing PasswordResetsController#update (for 127.0.0.1 at 2011-01-31 14:01:12) [PUT]
Parameters: {"commit"=>"Update password", "action"=>"update", "_method"=>"put", "authenticity_token"=>"PQD4+eIREKBfHR3/fleWuQSEtZd7RIvl7khSYo5eXe0=", "id"=>"v3iWW5eD9P9frbEQDvxp", "controller"=>"password_resets", "user"=>{"password"=>"johnwayne"}}
Применимый SQL:
UPDATE <code>users
SET updated_at
= '2011-01-31 22:01:12',
crypted_password
= 'бла',
perishable_token
= «бла»,
password_salt
= «бла»,
persistence_token
= «бла»
ГДЕ id
= 580
Я не вижу ошибкиПо сути, @ user_session.save просто возвращает false, как будто пароль не совпадает.
Я пропускаю проверку паролей в модели User:
class User < ActiveRecord::Base<br>
acts_as_authentic do |c|<br>
c.validate_password_field = false<br>
end
Вот упрощенный код контроллера:
def create<br>
logger.info("SAVED SESSION? #{@user_session.save}")<br>
end
, который выводит:
Processing UserSessionsController#create (for 127.0.0.1 at 2011-01-31 14:16:59) [POST]<br>
Parameters: {"commit"=>"Login", "user_session"=>{"remember_me"=>"0", "password"=>"johnwayne", "email"=>"test@email.com"}, "action"=>"create", "authenticity_token"=>"PQD4+eIREKBfHR3/fleWuQSEtZd7RIvl7khSYo5eXe0=", "controller"=>"user_sessions"}<br>
User Columns (2.2ms) SHOW FIELDS FROM <code>users
Пользовательская нагрузка (3,7 мс) SELECT * FROM users
WHERE (users
. email
= 'test@email.com') ЗАКАЗАТЬ по электронной почте ASC LIMIT 1
СОХРАНЕННАЯ СЕССИЯ?false
CACHE (0,0 мс) SELECT * FROM users
WHERE (users
. email
= 'test@email.com') ЗАКАЗАТЬ по электронной почте ASC LIMIT 1
Перенаправлено на http://localhost:3000/login
Наконец, консоль указывает, что новый пароль действителен:
$ u.valid_password?'johnwayne'
=> true
Хотел бы сделать все это в консоли, есть ли способ загрузить контроллер UserSession и вызвать методы напрямую?
Кимбалл