我正在努力将omniauth实现到Rails项目中。我的问题是身份验证提供程序--Twitter,Google,Facebook等都要求我创建一个带有URL的应用程序,该URL限制来自URL之外的任何地方的身份验证请求。我需要能够在本地测试,但也可以在生产中运行代码,但Facebook例如不允许2个域,并且无论如何都不允许localhost。
那么我的选择是什么?
答案 0 :(得分:3)
在工作中,我们为不同的环境设置了多个应用程序。在本地,在/etc/hosts
中添加一个条目(假设您使用的是Linux)eg: 127.0.0.1 mydomain.local
。
在本地环境的Facebook应用设置中,将其添加为网址。大多数事情,除了facebook需要刮你的网站(如按钮)工作。
答案 1 :(得分:3)
以下是我的解决方案的博文:http://make.bettermistak.es/2012/05/03/how-to-create-a-local-sandbox-facebook-app/
以下是相关位:“Facebook验证您的应用的所有请求都来自正确的域 - 他们不允许来自localhost或127.0.0.1的请求 - 并且此信息可以在托管URL下的应用设置中更新。将“local.herokuapp.com”添加到您的主机URL并保存此设置。然后编辑您的/ etc / hosts文件,以便本地内容位于域local.herokuapp.com下。此文件是隐藏的,因此从命令行输入sudo vi / etc / hosts。(用你最喜欢的编辑器代替vi。)我们需要使用sudo,因为这个文件是锁定的。在“127.0.0.1 localhost”下添加“127.0.0.1 local.herokuapp.com”行保存并退出文本编辑器。“
答案 2 :(得分:1)
据我所知,你必须为你的应用程序唱两个应用程序。(一个用于远程端,一个用于本地端)
幸运的是,有一种方法可以减少复杂性(假设您正在使用Linux):
您可以配置 .bash_profile (分别为本地计算机和远程计算机):
export YOURAPP_APP_ID="XXXXX"
export YOURAPP_APP_SECRET="XXXXX"
在代码中使用 ENV [' YOURAPP_APP_ID'] 和 ENV [' YOURAPP_APP_SECRET'] 。 例如,您可以在rails中编写这样的代码:
config.omniauth :facebook, ENV['YOURAPP_APP_ID'], ENV['YOURAPP_APP_SECRET']
通过这种方式,您可以在本地和远程端使用相同的代码。这将更容易维护。
如果您使用Heroku来托管您的应用程序,可以参考this page来配置环境变量。
答案 3 :(得分:0)
我在Facebook上创建了两个应用程序,其中一个我以沙盒模式运行以进行开发。这会是你的选择吗?