我有一个使用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的本地测试,我会非常感激吗?
答案 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/获取指向本地主机的安全网址