gpt4 book ai didi

ruby-on-rails - 如何使用secrets.yml 在Rails 4.1 中动态生成 secret token ?

转载 作者:行者123 更新时间:2023-12-04 12:32:11 24 4
gpt4 key购买 nike

Rails 新手。按照 Hartl 的教程,他使用此代码为 config/initializers/secret_token.rb 动态生成 secret token

require 'securerandom'

def secure_token
token_file = Rails.root.join('.secret')
if File.exist?(token_file)
# Use the existing token.
File.read(token_file).chomp
else
# Generate a new token and store it in token_file.
token = SecureRandom.hex(64)
File.write(token_file, token)
token
end
end

SampleApp::Application.config.secret_key_base = secure_token

我正在尝试使用 secrets.yml 来遵循新的 Rails 4.1 方式,并删除 secret_token.rb:
development:
secret_key_base: 79c1389c2fadc5a5a1918a5104ab34eb700c

test:
secret_key_base: fdb4edcde14173d62963705ca4d7876b5307790924

production:
secret_key_base: 85172605030a8225c083d886d066da2cb4aac1f0

但我认为你不能像在 yml 文件中的 secret_token.rb 中那样运行 ruby​​ 脚本。您将如何让 rails 动态生成 secret token 。这应该怎么做?什么是最佳实践?

最佳答案

给定一个函数 secret_token,它的唯一工作是在每次应用程序访问 secrets.yml 文件时生成一个新的 token 字符串,cookie 和很可能其他类似 session 的行为将无法正常工作,因为 secret token 会更改对该函数的每次调用。

首选且安全的方法是在开发和测试环境中使用 secrets.yml 文件中的任何旧 key (您可以通过在命令行上发出 rake secret 来生成 secret 字符串),然后使用您的生产服务器的环境变量知道,所以 secrets.yml 文件看起来像:

production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

例如,在 Heroku 上,使用 heroku config:set SECRET_KEY_BASE="insert key here"设置环境变量,就可以了。不要害怕将 secrets.yml 文件检入 scm ……只要您没有将生产 key 保存到文件中(而是使用我刚刚描述的环境变量方法),将文件检入 scm不构成威胁。

关于ruby-on-rails - 如何使用secrets.yml 在Rails 4.1 中动态生成 secret token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21673936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com