#ruby-on-rails #token #credentials #rails-activestorage
#ruby-on-rails #токен #учетные данные #rails-activestorage
Вопрос:
Я потратил на это часы, но не могу придумать никаких решений. Я просмотрел документы, чтобы увидеть, чего мне не хватает, но ничего не могу найти.
Я использую JWT и ActiveStorage с Amazon S3. Мне нужно скрыть эти ключи, прежде чем я смогу передать их на Github. Следуя многим примерам, вот как выглядит мой credentials.yml.enc
файл:
amazon:
key: <my access key for AWS S3>
secret: <my secret id for AWS S3>
jwt: <my jwt token encode/decode password>
Затем я сохраняю это в своем storage.yml
файле, который у меня есть:
test:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>
local:
service: Disk
root: <%= Rails.root.join("storage") %>
# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
amazon:
service: S3
access_key_id: <%= Rails.application.credentials[:amazon][:key] %>
secret_access_key: <%= Rails.application.credentials[:amazon][:secret] %>
region: us-east-1
bucket: your_own_bucket
Я также пытался с
<%= Rails.application.credentials[Rails.env.to_sym][:amazon][:key] %>
Если я перейду в консоль и попробую Rails.application.credentials[:amazon][:key]
или Rails.application.credentials.amazon[:key]
или любые другие варианты, всегда будет nil.
Rails.application.credentials
дает мне:
=> #<ActiveSupport::EncryptedConfiguration:0x00007faf1284aa80
@key_path=#<Pathname:/Users/demiansims/Development/Beastly/beastly-
backend/config/master.key>, @content_path=#
<Pathname:/Users/demiansims/Development/Beastly/beastly-
backend/config/credentials.yml.enc>, @env_key="RAILS_MASTER_KEY",
@raise_if_missing_key=false, @encryptor=#
<ActiveSupport::MessageEncryptor:0x00007faf1287bb80
@secret=">^x04x9BhxFEbx00x8BxB3O5xDCx8ExA6b",
@sign_secret=nil, @cipher="aes-128-gcm", @aead_mode=true,
@verifier=ActiveSupport::MessageEncryptor::NullVerifier,
@serializer=Marshal, @options={:cipher=>"aes-128-gcm"}, @rotations=[]>,
@config={}
Комментарии:
1. не могли бы вы подтвердить свой
credentials.yml.enc
размещенный здесь, потому что кажется, что в ключах после него нет пробеловamazon
2. Можете ли вы сказать мне, что вы подразумеваете под «пробелом»? Я разместил его точно так же, как по умолчанию. Я также добавил jwt: <мой ключ здесь>
3. Я не смог вставить код здесь, поэтому я добавил в качестве ответа
Ответ №1:
Возможно, ваш файл учетных данных не сохраняет ваши изменения. У меня была такая же проблема. Я использовал sublime и EDITOR="subl --wait" bin/rails credentials:edit
вызвал бы редактор, но он не распознал бы, когда я сохранил файл. Я так и не решил эту проблему, поэтому переключился на vi. EDITOR="vi" bin/rails credentials:edit
и проблема решена. Теперь все работает, как ожидалось. Если вы не знакомы с командами vi, как я, это полезно знать:
i
-> «вставить» позволит перемещаться с помощью клавиш со стрелками, удалять и добавлять код
esc
-> когда вы закончите редактирование, нажмите escape
:wq
-> это сохранит файл и завершит работу. после того, как вы нажмете escape, просто введите:wq
надеюсь, это кому-то поможет.
Ответ №2:
Я думаю, что есть проблема в вашем формате, credentials.yml.enc
это должно быть похоже:
amazon:
key: <my access key for AWS S3>
secret: <my secret id for AWS S3>
jwt: <my jwt token encode/decode password>
Таким образом, вы можете получить доступ к своему ключу следующим образом Rails.application.credentials.amazon[:key]