Не можете войти с действительным паролем, используя Authlogic и Ruby on Rails? - PullRequest
2 голосов
/ 01 февраля 2011

Мы поддерживаем немного необычную схему.Мы не требуем пароль при создании пользователя и используем 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 и вызвать методы напрямую?

Кимбалл

Ответы [ 3 ]

2 голосов
/ 01 февраля 2011

на вашем объекте, который вы сохраняете, вызывайте после сохранения u.errors.full_messages.inspect. Каков результат этого.также сделать u.valid?

1 голос
/ 18 декабря 2015

Пользователям также будет отказано в доступе, если их fail_login_count больше 50 на Authlogic :: Session :: BruteForceProtection .

1 голос
/ 02 февраля 2011

Оказывается, у меня в модели User есть атрибут active, который должен иметь значение true, чтобы разрешить вход в систему. Я нашел проблему, используя ссылку @ zetitic, чтобы попытаться создать UserSession. Error.full_messages в созданном объекте UserSession показал ошибку. Большое спасибо всем за вашу помощь! Я бы хотел увидеть ошибку в журнале, но это другое дело ...

...