Ruby Rails OmniAuth Facebook 适用于 Heroku 上的 Live App 但不适用于 Cloud9 上的测试应用
Ruby on Rails OmniAuth Facebook works for Live App on Heroku but not Test App on Cloud9
几周来我一直在努力解决这个问题,但就是想不通。
我正在管理 Ruby On Rails 上发布到 Facebook 的应用程序。开发环境在 Cloud9 IDE 中,实时站点托管在 Heroku 上。该应用程序有一个对应的 Developers.Facebook.com 帐户,其中包含一个完整的应用程序和一个与之关联的测试应用程序。
我的 Heroku 设置与完整的 Facebook 应用程序完美配合。
问题始于 Facebook 测试应用程序中的 Cloud9 设置。每当我尝试通过 API 连接时,我都会收到以下错误:
紧随其后的是这个错误:
我已尝试为我的 URL 使用以下选项,但似乎没有任何效果:
https://{workspace}-{username}.c9.io/
https://{workspace}-{username}.c9.io:80/
https://{workspace}-{username}.c9.io:8080/
https://{workspace}-{username}.c9users.io/
https://{workspace}-{username}.c9users.io:80/
https://{workspace}-{username}.c9users.io:8080/
这是我的 FacebookAccount 模型。
class FacebookAccount < ActiveRecord::Base
belongs_to :user
has_many :facebook_pages
if Rails.env.production?
FACEBOOK_APP_ID = ENV["FACEBOOK_APP_ID"]
FACEBOOK_SECRET = ENV["FACEBOOK_SECRET"]
else
FACEBOOK_APP_ID = "XXXXXXXXXXXXXXX"
FACEBOOK_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
end
def self.from_omniauth(auth)
oauth = Koala::Facebook::OAuth.new(FACEBOOK_APP_ID, FACEBOOK_SECRET)
new_access_info = oauth.exchange_access_token_info auth.credentials.token
new_access_token = new_access_info["access_token"]
new_access_expires_at = DateTime.now + new_access_info["expires"].to_i.seconds
where(provider: auth.provider, uid: auth.uid).first_or_initialize.tap do |facebook_account|
facebook_account.provider = auth.provider
facebook_account.uid = auth.uid
facebook_account.name = auth.info.name
facebook_account.image = auth.info.image
facebook_account.email = auth.info.email
facebook_account.oauth_token = new_access_token
facebook_account.oauth_expires_at = new_access_expires_at
facebook_account.save!
end
end
end
这似乎与您在 Facebook 中注册和配置应用程序的方式有关。请确保您已将这些 URI 添加到您的 Facebook 应用程序白名单中。 See here for more details.
当您在 Facebook 开发者设置页面中为您的网站设置 url 时,您必须提供两个 url。
- 您网站的基础 url (www.example.com)
- 您网站的回调url(www.example.com/auth/facebook/callback)
如果一个或另一个不存在,您将收到这些错误,告诉您回调 url 未列入白名单或网站 url 未列入白名单。
在“设置”>“基本”下将您的网站添加为平台,然后查找 "Add Platform"。在此处添加您的网站 URL。
好像是c9在回调URI中加了一个端口号。尝试将该端口号添加到 OAuth 有效回调 URI:
http://[workspace]-[username].c9.io:80/auth/facebook/callbac k
几周来我一直在努力解决这个问题,但就是想不通。
我正在管理 Ruby On Rails 上发布到 Facebook 的应用程序。开发环境在 Cloud9 IDE 中,实时站点托管在 Heroku 上。该应用程序有一个对应的 Developers.Facebook.com 帐户,其中包含一个完整的应用程序和一个与之关联的测试应用程序。
我的 Heroku 设置与完整的 Facebook 应用程序完美配合。
问题始于 Facebook 测试应用程序中的 Cloud9 设置。每当我尝试通过 API 连接时,我都会收到以下错误:
紧随其后的是这个错误:
我已尝试为我的 URL 使用以下选项,但似乎没有任何效果:
https://{workspace}-{username}.c9.io/
https://{workspace}-{username}.c9.io:80/
https://{workspace}-{username}.c9.io:8080/
https://{workspace}-{username}.c9users.io/
https://{workspace}-{username}.c9users.io:80/
https://{workspace}-{username}.c9users.io:8080/
这是我的 FacebookAccount 模型。
class FacebookAccount < ActiveRecord::Base
belongs_to :user
has_many :facebook_pages
if Rails.env.production?
FACEBOOK_APP_ID = ENV["FACEBOOK_APP_ID"]
FACEBOOK_SECRET = ENV["FACEBOOK_SECRET"]
else
FACEBOOK_APP_ID = "XXXXXXXXXXXXXXX"
FACEBOOK_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
end
def self.from_omniauth(auth)
oauth = Koala::Facebook::OAuth.new(FACEBOOK_APP_ID, FACEBOOK_SECRET)
new_access_info = oauth.exchange_access_token_info auth.credentials.token
new_access_token = new_access_info["access_token"]
new_access_expires_at = DateTime.now + new_access_info["expires"].to_i.seconds
where(provider: auth.provider, uid: auth.uid).first_or_initialize.tap do |facebook_account|
facebook_account.provider = auth.provider
facebook_account.uid = auth.uid
facebook_account.name = auth.info.name
facebook_account.image = auth.info.image
facebook_account.email = auth.info.email
facebook_account.oauth_token = new_access_token
facebook_account.oauth_expires_at = new_access_expires_at
facebook_account.save!
end
end
end
这似乎与您在 Facebook 中注册和配置应用程序的方式有关。请确保您已将这些 URI 添加到您的 Facebook 应用程序白名单中。 See here for more details.
当您在 Facebook 开发者设置页面中为您的网站设置 url 时,您必须提供两个 url。
- 您网站的基础 url (www.example.com)
- 您网站的回调url(www.example.com/auth/facebook/callback)
如果一个或另一个不存在,您将收到这些错误,告诉您回调 url 未列入白名单或网站 url 未列入白名单。
在“设置”>“基本”下将您的网站添加为平台,然后查找 "Add Platform"。在此处添加您的网站 URL。
好像是c9在回调URI中加了一个端口号。尝试将该端口号添加到 OAuth 有效回调 URI:
http://[workspace]-[username].c9.io:80/auth/facebook/callbac k