我正在尝试使用 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
获得它的价值。到目前为止,我尝试过的任何东西都没有任何效果。
谢谢!