Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails omniauth facebook+;无法执行设计回调_Ruby On Rails_Facebook_Devise_Omniauth_Omniauth Facebook - Fatal编程技术网

Ruby on rails omniauth facebook+;无法执行设计回调

Ruby on rails omniauth facebook+;无法执行设计回调,ruby-on-rails,facebook,devise,omniauth,omniauth-facebook,Ruby On Rails,Facebook,Devise,Omniauth,Omniauth Facebook,我已按照以下说明实施Desive和omniauth facebook: 问题 我的“facebook”回调函数确实会被调用 如果我取消对“facebook”函数的注释,则会发生错误。 路由似乎运行良好 但是,函数中的代码似乎没有被执行 以下代码不会引发任何错误 我已经研究这个问题好几天了。 请帮忙 class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def facebook

我已按照以下说明实施Desive和omniauth facebook:

问题

我的“facebook”回调函数确实会被调用

如果我取消对“facebook”函数的注释,则会发生错误。 路由似乎运行良好

但是,函数中的代码似乎没有被执行

以下代码不会引发任何错误

我已经研究这个问题好几天了。 请帮忙

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController


  def facebook
    raise params.inspect
  end

  def failure
    redirect_to root_path
  end

end
版本

devise 4.2.0
omniauth 1.3.1
omniauth-oauth2 1.4.0
omniauth-facebook 4.0.0
rails 5.0.0.1

我使用回调的方式有点不同: 您应该在omniauth.rb文件中声明回调:

Rails.application.config.middleware.use OmniAuth::Builder do
    provider :facebook, "app_id", "password",
        scope: 'public_profile', info_fields: 'id,name,link', display: 'popup', callback_path: '/stores/facebook_callback'

end

当然,在控制器中添加“facebook\u callback”操作(我的案例是存储的),并将其添加到路由文件。

可能是其他一些身份验证机制干扰了omniauth流,阻止了执行回调

您可以在应用程序控制器中检查可能导致问题的
before\u action
语句,并将它们作为
skip\u before\u action
添加到OmniAuthCallbackController

例如,如果您有:

class ApplicationController < ActionController::Base
  before_action :authenticate_user
  ...
class ApplicationController
然后添加:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  skip_before_action :authenticate_user
  ...
class Users::OmniAuthCallbackController
当我遇到同样的问题时,它帮我解决了

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  skip_before_action :authenticate_user
  ...