【问题标题】:Stripe w/ Ruby on Rails ENV variables in Javascript在 Javascript 中使用 Ruby on Rails ENV 变量进行条带化
【发布时间】:2013-11-22 14:45:29
【问题描述】:

我不确定如何将我的 Publishable 密钥放入我的 JavaScript 代码中。当我将可发布键的值直接放入 JavaScript 时,它可以正常工作。当我尝试使用环境变量时它不起作用。

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]

javascripts/charges.js.erb

Stripe.setPublishableKey(<%= Rails.configuration.stripe[:publishable_key] %>);

var stripeResponseHandler = function(status, response) {
  var $form = $('#payment-form');

  if (response.error) {

        $form.find('.payment-errors').text(response.error.message);
        $form.find('button').prop('disabled', false);
    } else {

        var token = response.id;

        $form.append($('<input type="hidden" name="stripeToken" />').val(token));

        $form.get(0).submit();
    }
};

jQuery(function($) {
    $('#payment-form').submit(function(e) {
      var $form = $(this);


      $form.find('button').prop('disabled', true);

      Stripe.createToken($form, stripeResponseHandler);

      return false;
    });
});

【问题讨论】:

    标签: javascript ruby-on-rails ruby stripe-payments


    【解决方案1】:

    不完全是一个解决方案,但我喜欢 Railscast 方式 (http://railscasts.com/episodes/288-billing-with-stripe) 使用环境变量设置元标记,然后使用 Javascript 调用元标记中的值。您想要的位从大约 4 分 10 秒开始

    <%= tag :meta, :name => "stripe-key", :content => STRIPE_PUBLIC_KEY %>
    

    那么JS代码就是:

    Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'))
    

    我不喜欢直接在 JS 中插入环境变量。

    【讨论】:

    • 为什么不喜欢直接在JS中插入环境变量呢?我还是新手,很高兴知道这样做的原因。
    • 最好不要在 javascript 源代码中存储密钥等的一个原因是,当 ENV 变量发生变化时,您必须重新编译资产。如果将其存储在meta 标签中,则只需重新启动服务器即可。
    【解决方案2】:

    你所拥有的看起来应该可以工作。当您启动服务器时,您是否输入了正确的密钥?

    PUBLISHABLE_KEY=pk_####_################ SECRET_KEY=sk_####_############## ## 导轨 s

    【讨论】:

      【解决方案3】:

      虽然我不认为在 Javascript 中存储 Stripe 详细信息是明智的,但您可以使用 gem called gon 将变量加载到 JS 中:

      #app/controllers/your_controller.rb
      gon.push({
        :user_id => 1,
        :user_role => "admin"
      })
      
      #app/assets/javascripts/your_javascript.js
      gon.variable_name
      

      您必须将其添加到您的布局文件中:

      <head>
        <title>some title</title>
        <%= include_gon %>
        <!-- include your action js code -->
        ...
      

      即使在开发中也要加载 ENV 变量,我会使用 gem called Figaro,它基本上允许您在任何状态下加载 ENV 变量:

      #app/config/application.yml
      YOUR_ENV_VAR: 'information'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多