Я пытаюсь реорганизовать механизм авторизации railstutorial.
Моя версия рельсов 3.2.0, я использую ruby 1.9.3-p0 и postrgresql 9.1.
Пока что мои тесты проходят, когда дело доходит до неудачной попытки входа, но успешный вход не удается (причина в том, что мне нужно реорганизовать старый механизм входа).
Вот моя функция sign_in помощников сеанса:
def sign_in(employee)
cookies.permanent.signed[:remember_token] = [employee.id, employee.salt]
self.current_employee = employee
end.
Одна проблема, которую я сразу вижу с функцией sign_in, заключается в том, что has_secure_password уже заботится о шифровании, соли и т. Д. Я подумал, что, возможно, мне следует использовать password_digest вместо employee.salt, но это тоже не удалось.
Я хочу, чтобы срок действия моих файлов cookie истекал через два часа. Я нашел эту опцию на api.rubyonrails.org в разделе cookie.
cookies[:key] = {
value => "employee.id, employee.salt",
expires => 2.hours.from.now
}
Другой вопрос, который у меня есть, связан с тем фактом, что у has_secure_password уже есть метод аутентификации, поэтому это означает, что мне не нужно использовать определение аутентификации, определенное в модели сотрудника (модель пользователя) в учебнике по рельсам, но когда я его комментирую out я получаю чтение флага:
NoMethodError: undefined method 'authenticate'
Вот мои контроллеры сеанса создают действие:
def create
employee = Employee.authenticate(params[:session][:email],
params[:session][:password])
if employee.nil?
flash.now[:error] = "Invalid email/password combination."
@title = "Sign in"
render 'new'
else
sign_in employee
redirect_back_or employee
end
end
Кажется, что проблема с Employee.authenticate.
Итак, у меня по существу есть три вопроса, и они заключаются в следующем:
В учебнике по рельсам мы проходим довольно длительный процесс шифрования и применения соли и т. д. к паролю сотрудников. Поскольку has_secure_password об этом уже позаботился, какую переменную я передал бы в свои функции или аргументы, которые захватили бы зашифрованный пароль?
Следующий вопрос связан с истечением срока действия файла cookie и как я буду использовать его в функции sign_in?
Наконец, как мне использовать метод аутентификации, чтобы рельсы распознавали его как подлинный метод?
Просто для протокола: я просмотрел railsguide, api.rubyonrails.org и другие вопросы, заданные на SO, похожие на этот. Конечно, это просто указывает на мое непонимание принципов, но я учусь и хорошо следую указаниям.
Спасибо за любые мысли, предложения и/или ресурсы, которыми вы могли бы поделиться со мной.
Обновление Я перечитал API на has_secure_password, и аутентификация принимает только один аргумент, а именно незашифрованный пароль... так что мне есть с чем работать.
Мне все еще нужна помощь, мысли или предложения, которые вы могли бы предложить... спасибо.
обновление Я нашел эту статью, посвященную тайм-аутам сеанса: http://madkingsmusings.blogspot.com/2011/05/session-timeouts-on-rails.html Я все еще работаю, чтобы понять, смогу ли я заставить его работать на меня, но он адаптирован для рельсового учебника. Что касается других вопросов, Майкл Хартл занят выпуском второго издания учебника по Ruby on Rails, и в этом выпуске он будет иметь дело с has_secure_password.