【发布时间】:2016-11-17 07:27:03
【问题描述】:
我使用了 Devise,omniauth-facebook gem。
我需要在同一应用程序中为同一环境(如生产)中的不同主机加载不同的 ENV 变量。需要实现Login with facebook。
我有两个主机用于相同的应用程序代码:
1) www.abc-domain.com
2) www.xyz-domian.com
我的 ENV 变量(config/settings.yml):
production:
abc-domain-credential:
facebook_access_key: "ABC_ACCESS_KEY"
facebook_api_key: "ABC_API_KEY"
xyz-domain-credential:
facebook_access_key: "XYZ_ACCESS_KEY"
facebook_api_key: "XYZ_API_KEY"
在我的 devise.rb 文件 (config/initializer/devise.rb) 中:
Devise.setup do |config|
...
...
require "omniauth-facebook"
config.omniauth :facebook, ENV_SETTINGS["abc-domain-credential"]["facebook_access_key"], ENV_SETTINGS["abc-domain-credential"]["facebook_api_key"], scope: 'email', info_fields: 'email,name'
# ===== OR ======
config.omniauth :facebook, ENV_SETTINGS["xyz-domain-credential"]["facebook_access_key"], ENV_SETTINGS["xyz-domain-credential"]["facebook_api_key"], scope: 'email', info_fields: 'email,name'
...
...
end
当我访问 http://www.abc-domain.com 时,下面的 env 应该从 settings.yml 加载
abc-domain-credential:
facebook_access_key: "ABC_ACCESS_KEY"
facebook_api_key: "ABC_API_KEY"
当我访问 http://www.xyz-domain.com 时,下面的 env 应该从 settings.yml 加载
xyz-domain-credential:
facebook_access_key: "XYZ_ACCESS_KEY"
facebook_api_key: "XYZ_API_KEY"
使用 Facebook 按钮登录:
<%= link_to "/users/auth/facebook", "Login With Facebook" %>
我必须为两个主机加载不同的 ENV 变量,例如
if host == "abc-domain"
config.omniauth :facebook, ENV_SETTINGS["abc-domain-credential"]["facebook_access_key"], ENV_SETTINGS["abc-domain-credential"]["facebook_api_key"], scope: 'email', info_fields: 'email,name'
elsif host == "xyz-domain"
config.omniauth :facebook, ENV_SETTINGS["xyz-domain-credential"]["facebook_access_key"], ENV_SETTINGS["xyz-domain-credential"]["facebook_api_key"], scope: 'email', info_fields: 'email,name'
end
在config/initializer/devise.rb 文件中
【问题讨论】:
-
您在哪里托管?你在用heroku之类的东西吗?
标签: ruby-on-rails ruby-on-rails-4 devise