Ruby on rails 4 rails 4 omniauth开发人员策略-回调错误-ActionController::InvalidAuthenticationToken在SessionController#create中
C9IDE、Ubuntu工作区、rails 4.2.10、ruby 2.4.0 当尝试在开发人员模式和开发人员策略下使用omniauth gem时,登录到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 希望能够在应用程序开发的剩余阶段使用开发人
'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'