ruby-on-rails-4 - 如何模拟 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
获得它的价值。到目前为止,我尝试过的任何东西都没有任何效果。
谢谢!
解决方案
推荐阅读
- azure - 具有静态 IP 和自定义证书/AKS 入口问题的 AKS
- c - 当我释放分配的内存时出现 munmap_chunk() 错误
- javascript - 如何使用 javascript/jquery 在 arrayList 中存储选中项的值?
- java - Springboot jdbc/jpa
- autodesk-forge - Forge Viewer - 如何输出网格信息日志?
- powershell - 如何使用 powershell 将 CSV 文件直接导入 Azure DataLake 而不是本地路径?
- python - 如何在 django 中编写自己的权限
- react-native - React Navigation 3 顶部选项卡
- git - 更新多个 Git 存储库的远程 URL
- ios - 如何使用搜索栏过滤器解决错误,然后快速展开 segue?