Spec-Zone.ru › Ruby on Rails 7.2

модуль ActiveRecord::SignedId

Подпись ID Active Record

Публичные методы класса

signed_id_verifier_secret() Показать исходный код
# File activerecord/lib/active_record/signed_id.rb, line 13
class_attribute :signed_id_verifier_secret, instance_writer: false

Установите секрет, используемый для проверки подписи ID, когда Active Record используется вне Rails. Внутри Rails это автоматически настраивается с помощью генератора ключей приложения Rails.

Публичные методы экземпляра

signed_id(expires_in: nil, expires_at: nil, purpose: nil) Показать исходный код
# File activerecord/lib/active_record/signed_id.rb, line 131
def signed_id(expires_in: nil, expires_at: nil, purpose: nil)
  raise ArgumentError, "Cannot get a signed_id for a new record" if new_record?

  self.class.signed_id_verifier.generate id, expires_in: expires_in, expires_at: expires_at, purpose: self.class.combine_signed_id_purposes(purpose)
end

Возвращает подписанный ID, сгенерированный с использованием предварительно настроенного ActiveSupport::MessageVerifier экземпляра.

Этот подписанный ID защищен от подделки, поэтому его безопасно отправлять в электронных письмах или иным образом передавать во внешнюю среду. Однако, как и в случае любого сообщения, подписанного с помощью ActiveSupport::MessageVerifier, подписанный ID не зашифрован. Он просто закодирован и защищен от подделки.

Это означает, что любой может декодировать ID; однако, если он подвергся подделке (так, чтобы указывать на другой ID), криптографическая подпись больше не будет совпадать, и подписанный ID будет считаться недействительным и вернёт nil при передаче в find_signed (или вызовет исключение find_signed!).

Кроме того, его можно установить с датой истечения срока действия (по умолчанию не истекает) и ограничить по назначению. Если дата истечения срока действия была пройдена до вызова find_signed, ID не найдёт соответствующую запись. Если установлено назначение, оно также должно совпадать.

Если вы случайно выпустили подписанный ID в общий доступ, который хотите отозвать раньше, чем дата истечения срока действия (или, возможно, вы забыли установить дату истечения срока действия, имея это в виду!), вы можете использовать назначение, чтобы по сути изменить версию signed_id, как показано ниже:

user.signed_id purpose: :v2

Затем измените вызовы find_signed так, чтобы они требовали этого нового назначения. Любые старые подписанные ID, которые не были созданы с назначением, больше не найдут соответствующую запись.

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API