Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 4 rails 4 omniauth开发人员策略-回调错误-ActionController::InvalidAuthenticationToken在SessionController#create中_Ruby On Rails 4_Omniauth_Omniauth Facebook - Fatal编程技术网

Ruby on rails 4 rails 4 omniauth开发人员策略-回调错误-ActionController::InvalidAuthenticationToken在SessionController#create中

Ruby on rails 4 rails 4 omniauth开发人员策略-回调错误-ActionController::InvalidAuthenticationToken在SessionController#create中,ruby-on-rails-4,omniauth,omniauth-facebook,Ruby On Rails 4,Omniauth,Omniauth Facebook,C9IDE、Ubuntu工作区、rails 4.2.10、ruby 2.4.0 当尝试在开发人员模式和开发人员策略下使用omniauth gem时,登录到'auth/developer'的链接会成功地将表单呈现给用户。提交表单时(其中路由为“auth/developer/callback”),会生成此错误: ActionController::InvalidAuthenticityToken in SessionsController#create 希望能够在应用程序开发的剩余阶段使用开发人

C9IDE、Ubuntu工作区、rails 4.2.10、ruby 2.4.0

当尝试在开发人员模式和开发人员策略下使用omniauth gem时,登录到
'auth/developer'
的链接会成功地将表单呈现给用户。提交表单时(其中路由为“auth/developer/callback”),会生成此错误:

ActionController::InvalidAuthenticityToken in SessionsController#create 
希望能够在应用程序开发的剩余阶段使用开发人员策略。当使用开发人员策略(在开发模式下)时,文档似乎没有指定回调所需的任何其他内容。文档中似乎至少有一个小的差异,是否也缺少一些内容

在使用实际提供程序或cucumber的测试模式期间,所有代码都能正常工作。 下面是我在config/initializers/omniauth.rb中开始的初始化器代码的一部分(不包括密钥/机密):

OmniAuth.config.logger = Rails.logger
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :developer unless Rails.env.production?
  provider :github, 'redacted,'redacted',
         { :name => "github", :scope => ['read:user','user:email']}
  provider :facebook, 'redacted', 'redacted'  
end
该文件包括:

gem 'omniauth'
gem 'omniauth-github'
gem 'omniauth-facebook'
routes.rb:

match 'auth/:provider/callback', :to => 'sessions#create', :via => [:get, :post]
主控主任:

 def create
    begin
      authenticator = Authentication.new(env["omniauth.auth"])
      authenticator.disallow(session[:user_id]) if session?
      authenticator.deny if authenticator.missing_information?
      auth, message = authenticator.register_or_login
      session[:user_id] = auth.user.id
etc.
app/controllers/sessions\u controller/authentication.rb:

  def initialize(omniauth)
      # get Omniauth authentication hash
      @auth_hash = omniauth
  end

  def auth_hash
      @auth_hash 
  end
etc.

成功时(使用其他提供程序或在测试模式下),回调应该提供有效的令牌,然后可以通过会话的create方法轻松地跟踪代码路径到Authenticator类的构造函数,等等

在使用开发人员策略的开发模式下,永远不会输入会话创建方法的主体

获取有效令牌后,我应该会看到如下消息:

"Welcome <name> You've signed up via <provider>."

我在维基的另一个部分找到了这个: Rails会话在回调开发人员策略后被关闭 使用POST请求发送开发人员策略回调。对给定操作禁用伪造保护,否则会话将被rails破坏

在\u操作之前跳过\u:仅验证\u真实性\u令牌::创建

这确实有效,但我还有几个问题。 before_操作是由omniauth本身定义和处理的,还是我应该在不处于开发人员模式时将其添加到控制器中?
看起来这个方案只需在开发人员模式下添加该行,然后在生产环境中删除该行,这似乎非常不可靠。有没有办法自动执行

Processing by SessionsController#create as HTML
  Parameters: {"name"=>"Example User", "email"=>"example@user.com", "provider"=>"developer"}
Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity in 1ms (ActiveRecord: 0.0ms)

ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
  actionpack (4.2.10) lib/action_controller/metal/request_forgery_protection.rb:181:in `handle_unverified_request'