如何使用ssl在本地主机上测试Facebook Connect

如何使用ssl在本地主机上测试Facebook Connect,facebook,ssl,oauth,omniauth,Facebook,Ssl,Oauth,Omniauth,我有一个rails应用程序,它使用FacebookConnect启用用户注册/登录(使用Desive和omniauth)。在阅读了几篇关于Firesheep的文章后,我决定强制我的整个应用程序使用ssl通信 我遵循本教程,强制我的rails 3.0.x应用程序仅通过ssl进行通信: 我遵循本教程,以便在locahost:3001上使用webrick在本地测试该应用程序: 到目前为止还不错。我的应用程序在localhost:3000上运行时强制ssl通信。我的问题发生在尝试与facebook co

我有一个rails应用程序,它使用FacebookConnect启用用户注册/登录(使用Desive和omniauth)。在阅读了几篇关于Firesheep的文章后,我决定强制我的整个应用程序使用ssl通信

我遵循本教程,强制我的rails 3.0.x应用程序仅通过ssl进行通信:

我遵循本教程,以便在locahost:3001上使用webrick在本地测试该应用程序:

到目前为止还不错。我的应用程序在
localhost:3000
上运行时强制ssl通信。我的问题发生在尝试与facebook connect通信时

如果我将facebook开发应用程序的网站url更改为
https://localhost:3001
,fb图形以
{
“错误”:{
“消息”:“无效重定向\u uri:应用程序配置不允许给定URL。”,
“类型”:“OAutheException”,
“代码”:191
}
}

但是,如果我将站点url更改为
http:localhost:3001
,我会从服务器收到一个错误,说在加载页面时连接被重置。我的浏览器URL栏显示它试图加载的URL是
localhost:3001/auth/facebook/callback?code=MYCODEHERE
,如果我只是在该URL前面添加“https://”,然后重新加载,页面将按预期加载


也许我的问题源于我对SSL的基本知识。但是如果有人能向我解释如何设置一个facebook开发应用程序来支持我对facebook connect over ssl的本地测试,我将不胜感激。

您需要设置一个子域,指向您的本地主机(
127.0.0.1中的任何内容),或者通过
/etc/hosts
文件创建所述子域


在这两种情况下,您都可以使用
http://yoursubdomain.yourdomain/auth/....
,其中
yourdomain
是为facebook应用程序注册的域。

您需要设置一个子域,指向您的本地主机(
127.0.0.1中的任何内容),或者通过
/etc/hosts
文件创建所述子域


在这两种情况下,您都可以使用
http://yoursubdomain.yourdomain/auth/....
,其中
yourdomain
是为facebook应用程序注册的域。

确定。让它工作起来。下面是我所做的,以便我可以在localhost:3001上通过ssl测试fb和twitter注册/登录

首先,我将我的应用程序的FB站点url设置为
http://localhost:3001
。然后我修改了omniauth初始值设定项,如下所示:

if RAILS_ENV == "production"
  full_host = 'https://www.mydomain.com'
  Rails.application.config.middleware.use OmniAuth::Builder do
    provider :facebook, 'myfbappid', 'myfbsecret', {:scope => 'email, publish_stream'}
    provider :twitter, 'mytwitterappid', 'mytwittersecret'
  end
  Twitter.configure do |config|
    config.consumer_key = 'myconsumerkey'
    config.consumer_secret = 'myconsumersecret'
    config.oauth_token =    'myoauthtoken'
    config.oauth_token_secret = 'myoauthtokensecret'
  end
elsif RAILS_ENV == "development"
  full_host = 'https://localhost:3001'
  Rails.application.config.middleware.use OmniAuth::Builder do
    provider :facebook, 'myfbdevappid', 'myfbdefappsecret', {:scope => 'email, publish_stream'}
    provider :twitter, 'mytwitterdevappid', 'mytwitterdevappsecret'
  end
  Twitter.configure do |config|
    config.consumer_key = 'mytwitterconsumerkey'
    config.consumer_secret = 'mytwitterconsumersecret'
    config.oauth_token =    'mytwitteroauthtoken'
    config.oauth_token_secret = 'mytwitteroathtokensecret'
  end
end
OmniAuth.config.full_host = full_host

嗯。让它工作起来。下面是我所做的,以便我可以在localhost:3001上通过ssl测试fb和twitter注册/登录

首先,我将我的应用程序的FB站点url设置为
http://localhost:3001
。然后我修改了omniauth初始值设定项,如下所示:

if RAILS_ENV == "production"
  full_host = 'https://www.mydomain.com'
  Rails.application.config.middleware.use OmniAuth::Builder do
    provider :facebook, 'myfbappid', 'myfbsecret', {:scope => 'email, publish_stream'}
    provider :twitter, 'mytwitterappid', 'mytwittersecret'
  end
  Twitter.configure do |config|
    config.consumer_key = 'myconsumerkey'
    config.consumer_secret = 'myconsumersecret'
    config.oauth_token =    'myoauthtoken'
    config.oauth_token_secret = 'myoauthtokensecret'
  end
elsif RAILS_ENV == "development"
  full_host = 'https://localhost:3001'
  Rails.application.config.middleware.use OmniAuth::Builder do
    provider :facebook, 'myfbdevappid', 'myfbdefappsecret', {:scope => 'email, publish_stream'}
    provider :twitter, 'mytwitterdevappid', 'mytwitterdevappsecret'
  end
  Twitter.configure do |config|
    config.consumer_key = 'mytwitterconsumerkey'
    config.consumer_secret = 'mytwitterconsumersecret'
    config.oauth_token =    'mytwitteroauthtoken'
    config.oauth_token_secret = 'mytwitteroathtokensecret'
  end
end
OmniAuth.config.full_host = full_host

您可以使用来获取指向本地主机的安全url

您可以使用来获取指向本地主机的安全url

我不确定是否得到了这个。我不使用任何子域。我只是希望FB graph使用https回调。Facebook只允许返回与您为应用程序注册的域相匹配的URL。因此,您需要为其提供一个url,该url可以是您在应用程序设置中输入的域,也可以是它的子域。由于您使用的是localhost,因此需要一个DNS/hosts条目来为您提供这样的子域,而不是
localhost
.Ahh。我明白你的意思。然而,我走了另一条路(我应该在我的第一篇文章中提到)。我有一个用于开发的FB应用程序(目前有一个url),还有一个单独的用于生产的FB应用程序(指向www.myapp.com)。我的问题是我无法让FB开发应用程序回拨到
https://localhost:3001
。它只想回拨
http://localhost:3001
。啊,尝试将站点url设置为
localhost
。如果这不起作用,或者完全忽略了端口,您可能必须切换到端口443。感到沮丧,但我感谢您的帮助,ThiefMaster。FB不让我使用你的第一个建议,说我必须预先挂起“http”或“https”。第二个建议导致了相同的FB图形错误,
{“error”:{“message”:“无效重定向”\u uri:应用程序配置不允许给定URL。”,“type”:“OAuthException”,“code”:191}
。如果我使用
https://locahost
。我不确定我是否明白。我不使用任何子域。我只是希望FB graph使用https回调。Facebook只允许返回与您为应用程序注册的域相匹配的URL。因此,您需要为其提供一个url,该url可以是您在应用程序设置中输入的域,也可以是它的子域。由于您使用的是localhost,因此需要一个DNS/hosts条目来为您提供这样的子域,而不是
localhost
.Ahh。我明白你的意思。然而,我走了另一条路(我应该在我的第一篇文章中提到)。我有一个用于开发的FB应用程序(目前有一个url),还有一个单独的用于生产的FB应用程序(指向www.myapp.com)。我的问题是我无法让FB开发应用程序回拨到
https://localhost:3001
。它只想回拨
http://localhost:3001
。啊,尝试将站点url设置为
localhost
。如果这不起作用,或者完全忽略了端口,您可能必须切换到端口443。感到沮丧,但我感谢您的帮助,ThiefMaster。FB不让我使用你的第一个建议,说我必须预先挂起“http”或“https”。第二个建议导致了相同的FB图形错误,
{“error”:{“message”:“无效重定向”\u uri:应用程序配置不允许给定URL。”,“type”:“OAuthException”,“code”:191}
。如果我使用
https://locahost
。我需要使用
Rails.env==“development”
而不是
Rails\u env==“development”
。我需要使用
Rails.env==”