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

时间:2012-07-02 22:12:35

标签: facebook ssl oauth omniauth

我有一个使用facebook连接的rails应用程序启用用户注册/登录(使用设计和omniauth)。在阅读Firesheep上的几篇文章后,我决定强制为我的整个应用程序进行ssl通信。

我按照本教程强制我的rails 3.0.x应用程序仅通过ssl进行通信:http://www.simonecarletti.com/blog/2011/05/configuring-rails-3-https-ssl/

我遵循本教程,以便我可以在locahost上使用webrick在本地测试应用程序:3001:http://blog.readypulse.com/2012/01/19/setup-webrick-to-serve-ssl-https-as-well-as-non-ssl-http-traffic-side-by-side/

到目前为止一切顺利。我的应用程序在localhost:3000上运行时强制进行ssl通信。尝试与facebook connect进行通信时出现问题

如果我将我的脸书发展应用程序的网站网址更改为https://localhost:3001,则fb图表会响应  { "error": { "message": "Invalid redirect_uri: Given URL is not allowed by the Application configuration.", "type": "OAuthException", "code": 191 } }

但是,如果我将网站网址更改为http:localhost:3001,我的服务器会收到一条错误消息,指出在加载网页时已重置连接。我的浏览器网址栏显示其尝试加载的网址为localhost:3001/auth/facebook/callback?code=MYCODEHERE,如果我只是在该网址前面添加“https://”并重新加载,则网页会按预期加载。

也许我的问题源于我对SSL的基本知识。但如果有人能向我解释如何设置一个facebook开发应用程序以支持我在facebook上连接ssl的本地测试,我会非常感激吗?

3 个答案:

答案 0 :(得分:2)

您需要设置指向本地主机(whatever IN A 127.0.0.1)的子域或通过/etc/hosts文件创建所述子域。

在这两种情况下,您都可以使用http://yoursubdomain.yourdomain/auth/.... yourdomain作为Facebook应用注册的域名。

答案 1 :(得分:2)

行。搞定了。这是我做的,以便我可以在localhost:3001上测试fb和twitter注册/登录ssl。

首先,我将我的应用程序的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

答案 2 :(得分:0)

您可以使用https://ngrok.com/获取指向本地主机的安全网址