Зашифровать жетон разработки
Я использую Devise с аутентификацией токена и теперь хочу зашифровать токен в базе данных. Может кто-нибудь дать мне подсказку, где разрабатывает хранение / получение токена из БД?
Я также использую драгоценный камень attr_encrypted, с которым все шифрование должно быть довольно легким, когда правильное местоположение найдено.
Редактировать:
Я реализовал аутентификацию токена, как описано здесь: http://zyphdesignco.com/blog/simple-auth-token-example-with-devise
Я добавил следующую строку в модель пользователя, которая должна зашифровать
attr_encrypted :authentication_token, :key => 'a secret key', :attribute => 'authentication_token'
Когда я запускаю его и пытаюсь войти, я получаю следующее сообщение об ошибке:
Completed 500 Internal Server Error in 364ms
SystemStackError - stack level too deep:
(gem) actionpack-3.2.13/lib/action_dispatch/middleware/reloader.rb:70:in `'
Кажется, что есть конфликт с devise и attr_encrypted, и оба борются за переопределение метода authentication_token (спасибо за подсказку @sbfaulkner)
Может быть, у кого-то была похожая проблема и есть решение?
2 ответа
Вот как я это сделал на моей модели User:
before_save :ensure_authentication_token
attr_encrypted :authentication_token, :key => 'my key'
def ensure_authentication_token
if authentication_token.blank?
self.authentication_token = generate_authentication_token
end
end
private
def generate_authentication_token
loop do
token = User.encrypt_authentication_token(Devise.friendly_token)
break token unless User.where(encrypted_authentication_token: token).first
end
end
Секрет в этом методе: encrypt_authentication_token
который создает attr_encrypted.
Важные сведения о стратегии Token Authenticable находятся в Devise::Models:: TokenAuthenticatable
Модуль - работает с набором простых методов:
find_for_token_authentication
используется для аутентификации ресурсаensure_authentication_token
/ensure_authentication_token!
следует использовать для генерации токена для свежего ресурса - Devise не будет вызывать его сам по себе.
Если attr_encrypted
gem совместим с моделями AR, поэтому я считаю, что у вас не возникнет проблем с Devise, но лучший способ убедиться в этом - попробовать его.