Ruby on Rails OmniAuth Facebook适用于Heroku上的Live App,但不适用于Cloud9上的Test App

Oko*_*uko 6 facebook ruby-on-rails heroku cloud9-ide omniauth-facebook

几周来我一直在努力解决这个问题,而我无法弄明白.

我正在管理一个发布到Facebook的Ruby On Rails应用程序.开发环境位于Cloud9 IDE中,实时站点位于Heroku上.该应用程序在Developers.Facebook.com上有一个相应的帐户,其中包含完整的应用程序和与之关联的测试应用程序.

我的Heroku设置与完整的Facebook应用程序完美配合.

问题始于Facebook Test App中的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/
Run Code Online (Sandbox Code Playgroud)

这是我的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
Run Code Online (Sandbox Code Playgroud)

Ale*_*una 2

当您在 Facebook 开发者设置页面中设置网站的 url 时,您必须提供两个 url。

\n\n
    \n
  1. 您网站的基本网址 (www.example.com)
  2. \n
  3. 您网站的回调网址 (www.example.com/auth/facebook/callback)
  4. \n
\n\n

如果其中之一不存在,您将收到这些错误,告诉您回调 url 未列入白名单或网站 url 未列入白名单。

\n\n

在“设置”>“基本”下将您的网站添加为平台,然后查找“添加平台”。在那里添加您的网站 URL。

\n\n

在此输入图像描述

\n\n

看来c9在回调URI中添加了一个端口号。尝试将该端口号添加到 OAuth 有效回调 URI:

\n\n

http://[工作空间]-[用户名].c9.io:80/auth/facebook/callbac \xe2\x80\x8c\xe2\x80\x8bk

\n