Зашифровать жетон разработки

Я использую 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, но лучший способ убедиться в этом - попробовать его.

Другие вопросы по тегам