【问题标题】:device facebook oAuth stucked on redirect page设备facebook oAuth卡在重定向页面上
【发布时间】:2014-10-25 21:20:27
【问题描述】:

我正在使用 devise omniauthable 进行 google 和 facebook 的用户身份验证。谷歌工作得很好,但 facebook 卡在重定向页面上,尽管在他们的平台上用户正确登录(在 facebook 上)。

这是我得到的日志:

2014-09-01T15:26:41.996884+00:00 app[web.1]: (facebook) Request phase initiated.
2014-09-01T15:26:42.211524+00:00 app[web.1]: (facebook) Request phase initiated.
2014-09-01T15:26:41.994627+00:00 app[web.1]: Started GET "/users/auth/facebook?locale=es" for 190.15.201.45 at 2014-09-01 15:26:41 +0000
2014-09-01T15:26:42.205674+00:00 app[web.1]: Started GET "/users/auth/facebook?locale=es" for 190.15.201.45 at 2014-09-01 15:26:42 +0000
2014-09-01T15:26:42.217355+00:00 heroku[router]: at=info method=GET path="/users/auth/facebook?locale=es" host=myapp.herokuapp.com request_id=2b9aab45-c511-4ac9-b36f-4e6925cba3aa fwd="190.15.201.45" dyno=web.1 connect=2ms service=16ms status=302 bytes=1284

我的路线:

devise_for :users, :controllers => { omniauth_callbacks: "users/omniauth_callbacks" }

我的omniauth_callbacks_controller:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController

def self.provides_callback_for(provider)
class_eval %Q{
  def #{provider}
    @user = User.find_for_oauth(env["omniauth.auth"], current_user)

    if @user.persisted?
      sign_in_and_redirect @user, event: :authentication
      set_flash_message(:notice, :success, kind: "#{provider}".capitalize) if is_navigational_format?
    else
      session["devise.#{provider}_data"] = env["omniauth.auth"]
      redirect_to new_user_registration_url
    end
  end
}
end

[:google_oauth2, :facebook].each do |provider|
   provides_callback_for provider
end

我的用户模型:

class User < ActiveRecord::Base

devise :database_authenticatable, :confirmable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable, :omniauthable

belongs_to :company

before_save :create_user_company

def create_user_company
  if self.company_id.nil?
    company = Company.new
    company.email = self.email
    company.save
    self.company_id = company.id
    self.admin = true
  end
end

def self.find_for_oauth(auth, signed_in_resource = nil)
  identity = Identity.find_for_oauth(auth)
  user = signed_in_resource ? signed_in_resource : identity.user

  if user.nil?
    email = auth.info.email
    user = User.where(:email => email).first if email

    if user.nil?
      user = User.new(
        name: auth.extra.raw_info.name,
        email: email ? email : "temp_email@mail.com",
        password: Devise.friendly_token[0,20]
      )
      user.skip_confirmation!
      user.save!
    end
  end

  if identity.user != user
    identity.user = user
    identity.save!
  end

  user

end

end

设计初始化器是基本的:

config.omniauth :facebook, ENV['FB_APP_ID'], ENV['FB_APP_SECRET']

但我也试过this(没用):

config.omniauth :facebook, ENV['FB_APP_ID'], ENV['FB_APP_SECRET'],{client_options: {ssl: {ca_file: Rails.root.join('lib/assets/cacert.pem').to_s}}}

我正在使用这个宝石:

gem 'omniauth'
gem 'omniauth-google-oauth2'
gem 'omniauth-facebook'
gem 'devise'
gem 'figaro' #for safe saving of env vars

如果您有任何提示,我将不胜感激。 提前致谢。

PS:this 不是答案

【问题讨论】:

  • 需要考虑的一点是它永远不会到达“method=GET path="/users/auth/facebook/callback"。只到达“method=GET path="/users/auth/facebook " 然后卡住了。
  • + 在浏览器网络控制台上我收到“500 内部服务器错误”

标签: ruby-on-rails-4 oauth devise facebook-oauth


【解决方案1】:

好的,如果有人遇到同样的问题,这已经解决了:

  • 进入您的 facebook 开发者控制台 (developers.facebook)
  • 输入您的应用程序:
    1. 在设置中您需要添加联系电子邮件。
    2. 在状态和评论中,您会发现这个问题(以前的沙盒):“您想让这个应用程序及其所有实时功能向公众开放吗?”。 点击“是”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    相关资源
    最近更新 更多