ruby-on-rails Ruby on Rails上的条带-创建配置/初始化程序/stripe.rb

8wigbo56  于 2023-02-26  发布在  Ruby
关注(0)|答案(2)|浏览(173)

按照Ruby on Rails的Stripe设置文档(https://stripe.com/docs/checkout/rails),它说config/initializers/stripe.rb将在应用程序启动时创建。
我已经关闭服务器并重新启动服务器好几次了,但是这个文件没有在文档中标识的路径下创建。
我做错什么了?谢谢你的帮助。

7vhp5slm

7vhp5slm1#

请手动创建此文件。初始化器不会在应用程序启动时生成。Rails会读取它们来配置您的特定应用程序。
创建config/initializers/stripe.rb并使用以下内容填充它。

Rails.configuration.stripe = {
  :publishable_key => ENV['PUBLISHABLE_KEY'],
  :secret_key      => ENV['SECRET_KEY']
}

Stripe.api_key = Rails.configuration.stripe[:secret_key]

在ENV中设置您的密钥和可发布密钥。更改后重新启动您的应用程序,否则您将不会看到任何差异。
我可以理解你会有多困惑,Stripe文档说“初始化器是设置这些值的好地方,这些值将在应用程序启动时提供。”他们意味着你在该文件中设置的值将提供给应用程序示例。

yqkkidmi

yqkkidmi2#

我真的很不喜欢Stripe Gem的反模式,相反,我最终覆盖了Stripe::StripeConfiguration(即使在这里我们也可以看到命名冗余😞),下面是我的解决方案:

## Stripe Initializer
## {Rails.root}/config/initializers/stripe.rb

# frozen_string_literal: true

require 'stripe'

module Stripe
  class StripeConfiguration
    def api_key=(key_value)
      @api_key = key_value || Rails.application.credentials.stripe.secret_key
    end
  end
end

Rails.configuration.stripe = {
  publishable_key: Rails.application.credentials.stripe.secret_key,
  secret_key: Rails.application.credentials.stripe.secret_key
}

Stripe.api_key = Rails.configuration.stripe[:secret_key]

注意:对于Stripe团队,他们的实现并没有提供额外的安全层,任何可以访问控制台/凭证的人都可以读取它,所以他们在每个请求上覆盖它是没有意义的。你总是可以用一个操作符分配一个属性。
PS:我正在开发一个应用程序,可以提高安全性(即将推出)

相关问题