Доступ к учетным данным Rails из моделей - PullRequest
0 голосов
/ 03 октября 2019

Я работал следующим образом:

key = "\xD1\x9C\xAA\xFB/\xF3\xD7\x10\xAF\xBA\x97\x97\x00\xDA\xBF\xC1\xCE\xD6\xCB*\xCC\xF4w<2\xEA=o\x1EY\x16\xE5"
attr_encrypted :client_id, key: key

Затем я использовал этот ключ для шифрования.

Я пытался сохранить этот же ключ в учетных данных как с кавычками, так и без них, но похоже, что яЯ не могу получить к ним доступ из модели

Я пытался:

  key_1 = Rails.application.credentials.dig(:encrypt, :xenon_a_1).to_s
  attr_encrypted :client_id, key: key_1

:

  key_1 = Rails.application.credentials.dig(:encrypt, :xenon_a_1)
  attr_encrypted :client_id, key: key_1.to_s

и без .to_s в обоих

Я пыталсяиспользуя .to_s обоими следующими способами:

учетные данные:

encrypt:
  xenon_a_1: "\xD1\x9C\xAA\xFB/\xF3\xD7\x10\xAF\xBA\x97\x97\x00\xDA\xBF\xC1\xCE\xD6\xCB*\xCC\xF4w<2\xEA=o\x1EY\x16\xE5"

:

encrypt:
      xenon_a_1: \xD1\x9C\xAA\xFB/\xF3\xD7\x10\xAF\xBA\x97\x97\x00\xDA\xBF\xC1\xCE\xD6\xCB*\xCC\xF4w<2\xEA=o\x1EY\x16\xE5

Я знаю, что мои учетные данные настроены правильно, потому что я могуиспользуйте AWS, PayPal, Stripe и Braintree из него.

Я могу только предположить, учетные данные недоступны из моделей?

Ошибка, которую я получаю при прохождении через мою форму, является той же ошибкой, которую я получил бы, если бы мой ключ былпусто или не 32 бита.

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Любой, кто сталкивался с этим и использовал зашифрованный через attr гем с ruby:

https://ankane.org/encryption-keys

Это только спасло меня ^

Упоминает мою точную проблему с разрешением.

0 голосов
/ 03 октября 2019

Если ваша модель выглядит примерно так:

class Foo
  key_1 = 'bar'
end

Это не сработает. Эта переменная также может не существовать, потому что вы не можете вызвать ее в другом месте класса. Например:

class Foo
  key_1 = 'bar'

  def self.baz
    puts key_1
  end

  def baz
    puts key_1
  end
end

Проверьте это с помощью:

Foo.new.baz
NameError: undefined local variable or method `key_1' for #<Foo:0x00007fc720299570>

И:

Foo.baz
NameError: undefined local variable or method `key_1' for Foo:Class

Попробуйте найти переменную, и вы не найдете ее:

Foo.instance_variables
=> []
Foo.class_variables
=> []
Foo.constants
=> []

Вместо этого вы должны создать его экземпляр как константу в классе:

class Foo
  KEY_1 = 'bar'

  def self.baz
    puts KEY_1
  end

  def baz
    puts KEY_1
  end
end

и проверить его:

Foo.baz
bar

Foo.new.baz
bar

Foo::KEY_1
=> "bar"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...