Я пытаюсь реорганизовать механизм авторизации Railstutorial.
Моя версия rails - 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 под куки.
cookies[:key] = {
value => "employee.id, employee.salt",
expires => 2.hours.from.now
}
Еще один вопрос, который у меня есть, связан с тем, что has_secure_password уже имеет метод authenticate, поэтому мне не нужно использовать определение authenticate, определенное в модели employee (пользовательская модель) в руководстве по rails, но когда Я комментирую это, я получаю флаг, читающий:
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.
Итак, у меня, по сути, есть три вопроса, и они заключаются в следующем:
В уроке по rails мы проходим довольно длительный процесс шифрования и применения соли и т. Д. К паролю сотрудников. Поскольку has_secure_password уже позаботился об этом, какую переменную я передам своим функциям или аргументам, которые захватят зашифрованный пароль?
Следующий вопрос связан с истечением срока действия куки и как я могу использовать это в функции sign_in?
Наконец, как мне использовать метод authenticate, чтобы rails распознал его как подлинный метод?
Только для записи, я искал 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.