【问题标题】:Make local development work with Facebook/Google APIs使用 Facebook/Google API 进行本地开发
【发布时间】:2012-01-11 12:09:17
【问题描述】:

我正在将omniauth 实施到Rails 项目中。我的问题是身份验证提供程序 - Twitter、Google、Facebook 等都要求我创建一个带有 url 的应用程序,该应用程序限制来自 url 以外的任何地方的身份验证请求。我需要能够在本地进行测试,但也需要在生产环境中运行代码,但例如 Facebook 不允许 2 个域并且无论如何都不允许 localhost。

那么我有什么选择呢?

【问题讨论】:

    标签: ruby-on-rails facebook authentication omniauth


    【解决方案1】:

    在工作中,我们为不同的环境设置了多个应用程序。在本地,在/etc/hosts 中添加一个条目(假设您使用的是 linux)eg: 127.0.0.1 mydomain.local

    在本地环境的 facebook 应用程序设置中,将其添加为 url。大多数事情,除了 facebook 需要抓取您的网站(喜欢按钮)的工作。

    【讨论】:

    • 感谢您的回答。我添加了以下内容:127.0.0.1 development.mydomainname.com 到主机并刷新缓存,但 Chrome 无法连接到 development.mydomainname.com。有什么想法吗?
    • 只是 chrome 吗?页面是否在其他浏览器上加载?
    • 对不起。不,它的所有浏览器。他们无法连接到服务器“development.mydomainname.com”
    • 我需要删除已经存在的 localhost 条目吗?
    • 不,这将删除 127.0.0.1 和 localhost 之间的绑定
    【解决方案2】:

    这是我的解决方案的博客文章: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”和保存并退出您的文本编辑器。”

    【讨论】:

      【解决方案3】:

      据我所知,您必须为您的应用程序创建两个应用程序。(一个用于远程端,一个用于本地端)

      幸运的是,有一种方法可以减少复杂性(假设你在 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 来配置环境变量。

      【讨论】:

      • 是的。最后我使用了两个应用程序的解决方案。一个用于远程,一个用于本地。
      【解决方案4】:

      我在 Facebook 上创建了两个应用程序,其中一个以沙盒模式运行以用于开发目的。这对你来说是一个选择吗?

      【讨论】:

      • 谢谢。是的,这是一种可能。仍然没有解决我无法在 Facebook 上使用 localhost 的问题。
      • 如果你有一个动态 ip,你可以使用 dyndns.com 之类的东西来分配一个 fqdn,这就是我们在这里所做的并用于开发应用程序。
      猜你喜欢
      • 2011-02-13
      • 2014-02-13
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多