在测试模式下无法绕过 Omniauth 初始化程序

Posted

技术标签:

【中文标题】在测试模式下无法绕过 Omniauth 初始化程序【英文标题】:Cannot bypass Omniauth initializer in test mode 【发布时间】:2018-10-19 14:09:56 【问题描述】:

我正在尝试测试我的 graphql 架构而不需要任何身份验证。

我已将skip_before_action :verify_authenticity_token 添加到GraphqlController,并且在使用邮递员时(由来自graphiql 的curl 请求复制),并且在开发模式下看到了成功的查询。

在邮递员中,我在正文 "query":"\n user(id: 1) \n id\n created_at\n updated_at\n jwt\n\n\n","variables":null,"operationName":null 中有查询,在标题中有 Content-Type application/json,这工作正常。

现在处于测试模式,我正在使用 Omniauth 的身份验证初始化程序:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider(
    :auth0,
    Auth0::Config["app_client_id"],
    Auth0::Config["app_client_secret"],
    Auth0::Config["domain"],
    callback_path: "/auth/auth0/callback"
  )
end

虽然我不想这样做,因为我不希望此帖子请求中需要任何标头。

这是我的 rspec 请求:

require 'graphlient'

RSpec.shared_context "GraphQL Client", shared_context: :metadata do
  let(:client) do
    Graphlient::Client.new('https://api.example.org/graphql') do |client|
      client.http do |h|
        h.connection do |c|
          c.use Faraday::Adapter::Rack, app
        end
      end
    end
  end
end

这是实际测试

it 'retrieves schema' do
  expect(client.schema).to be_a GraphQL::Schema
end

出现错误:

 Failure/Error:
   expect  client.schema.status 
     .to raise_error(Graphlient::Errors::ServerError)

   expected Graphlient::Errors::ServerError, got #<ArgumentError: Received wrong number of arguments. [nil, nil, nil, :callback_path=>"/auth/auth0/callback"]> with backtrace:
     # /usr/local/bundle/gems/omniauth-auth0-1.4.2/lib/omniauth/strategies/auth0.rb:41:in `initialize'

【问题讨论】:

【参考方案1】:

我想我明白了!我忘记在 config/auth0.yml 中添加用于测试的密钥。

这是一个隐藏文件。

【讨论】:

以上是关于在测试模式下无法绕过 Omniauth 初始化程序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 omniauth / oauth 对每秒登录次数进行基准测试? (红宝石+rspec)

stm32 can可以接收数据,但却无法发送数据,怎么回事

SQL绕过实例

无法在 GitLab CE 上启用 Google 登录(omniauth)

Rails Devise Omniauth new_user_registration_url

postman如何绕过登录账户和密码验证,进行接口测试的方法