首页 > 解决方案 > 如何模拟 github oauth rails4 的黄瓜失败?

问题描述

我正在尝试使用 OmniAuth for github 完成注册/登录/注销行为。所有其他 cucumber 和 rspec 测试通过所有其他行为。

当使用无效凭据发出omniauth请求时,我正在尝试进行黄瓜测试以遵循会话控制器中的失败路线:

match 'auth/failure', :to => 'sessions#failure', :via => [:get, :post]

但它没有这样做,而是返回并启动注册/登录过程(然后由于验证错误而失败)。

我的 OmniAuth 初始化程序是:

# config/initializers/omniauth.rb

OmniAuth.config.logger = Rails.logger
OmniAuth.config.allowed_request_methods = [:post] # recently added because of vulnerability

#************************************************
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :github, ENV['GITHUB_CLIENT_ID'],ENV['GITHUB_CLIENT_SECRET'],
         { :name => "github", :scope => ['read:user','user:email']}
end

我的会话代码是:

# app/controllers/sessions_controller.rb

  def failure    
    begin
    rescue Exception => exception    
      flash[:error] = "#{exception.class}:  #{exception.message}" 
      redirect_to welcome_landing_path
    end  

我想我可以通过将 features/support/env.rb 设置为:

Before('@omniauth_test5') do
OmniAuth.config.test_mode = true
Capybara.default_host = 'http://example.com'

OmniAuth.config.mock_auth[:github] = :invalid_credentials
Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[:github]
end
 
After('@omniauth_test5') do
OmniAuth.config.test_mode = false
OmniAuth.config.mock_auth[:github] = nil
end

但这只是后来在我的会话create方法中失败了

我还发现很难找到一个合理的位置来放置断点,因为所有操作都发生在中间件中。

根据维基:

默认情况下,Omniauth 将在开发和测试环境中引发无效凭据异常。如果您希望在这些环境中被重定向到 /auth/failure 端点,请包含以下代码:

OmniAuth.config.on_failure = Proc.new { |env|
  OmniAuth::FailureEndpoint.new(env).redirect_to_failure
}

但完全不清楚这段代码的去向,或者如何env获得它的价值。到目前为止,我尝试过的任何东西都没有任何效果。

谢谢!

标签: ruby-on-rails-4cucumbergithub-oauth

解决方案


推荐阅读