0

在我配置 Active Admin Gem 之前,我的纯 API 应用程序一切正常。我做了几乎所有的工作,但现在我需要 auth 标头的规范失败了。

我的 application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception, if: :verify_api

  def verify_api
    params[:controller].split('/')[0] != 'devise_token_auth'
  end
end

我的 api_controller.rb

class ApiController < ActionController::API
  include DeviseTokenAuth::Concerns::SetUserByToken
end

我也覆盖了我的 session_controller 但我真的不认为它会导致错误,因为登录/注册工作正常。

注册控制器.rb

class Api::V1::Customer::RegistrationsController < DeviseTokenAuth::RegistrationsController
  prepend_before_action :configure_permitted_parameters
  skip_before_action :verify_authenticity_token

  protected

  def configure_permitted_parameters
    added_attrs = %i[email password password_confirmation current_password]
    added_attrs += %i[first_name last_name phone_number] if user_signup?
    devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
    devise_parameter_sanitizer.permit :account_update, keys: added_attrs
  end

  def user_signup?
    request.url.include?('/auth')
  end
end

faqs_spec.rb

require 'swagger_helper'
RSpec.describe 'FAQ', type: :request do
  let(:my_user) { FactoryBot.create(:user) }
  path '/api/v1/customer/faqs' do
    get 'Get all the faqs' do
      tags 'FAQs'
      consumes 'application/json'
      parameter name: 'access-token', in: :header, type: :string
      parameter name: 'client', in: :header, type: :string
      parameter name: 'uid', in: :header, type: :string
      response '200', 'ok' do
        before do
          sign_in my_user
          @auth_headers = my_user.create_new_auth_token
          10.times do
            FactoryBot.create(:faq)
          end
        end
        let(:'access-token') { @auth_headers["access-token"] }
        let(:client) { @auth_headers["client"] }
        let(:uid) { @auth_headers["uid"] }
        run_test! do |response|
          data = JSON.parse(response.body)
          expect(data["faqs"].length).to eq 10
          expect(Faq.count).to eq 10
          expect(data["faqs"][0].length).to eq 2
        end
      end
    end
  end
end

一切都在使用 Postman 和我的 React 应用程序。但是这里会出现以下错误。

1) FAQ /api/v1/customer/faqs get ok returns a 200 response
     Failure/Error: options[:id] = id
     
     NoMethodError:
       undefined method `[]=' for nil:NilClass
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/rack-2.2.3/lib/rack/session/abstract/id.rb:265:in `context'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/rack-2.2.3/lib/rack/session/abstract/id.rb:260:in `call'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/warden-1.2.9/lib/warden/manager.rb:36:in `block in call'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/warden-1.2.9/lib/warden/manager.rb:34:in `catch'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/warden-1.2.9/lib/warden/manager.rb:34:in `call'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/rack-2.2.3/lib/rack/etag.rb:27:in `call'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/rack-2.2.3/lib/rack/conditional_get.rb:27:in `call'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/rack-2.2.3/lib/rack/head.rb:12:in `call'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/bugsnag-6.23.0/lib/bugsnag/integrations/rack.rb:51:in `call'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/railties-6.1.4.1/lib/rails/rack/logger.rb:37:in `call_app'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/railties-6.1.4.1/lib/rails/rack/logger.rb:26:in `block in call'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/railties-6.1.4.1/lib/rails/rack/logger.rb:26:in `call'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/rack-2.2.3/lib/rack/runtime.rb:22:in `call'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/rack-2.2.3/lib/rack/sendfile.rb:110:in `call'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/rack-cors-1.1.1/lib/rack/cors.rb:100:in `call'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/railties-6.1.4.1/lib/rails/engine.rb:539:in `call'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/rack-test-1.1.0/lib/rack/mock_session.rb:29:in `request'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/rack-test-1.1.0/lib/rack/test.rb:266:in `process_request'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/rack-test-1.1.0/lib/rack/test.rb:119:in `request'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/rswag-specs-2.4.0/lib/rswag/specs/example_helpers.rb:20:in `submit_request'
     # /Users/apple/.rvm/gems/ruby-3.0.1/gems/rswag-specs-2.4.0/lib/rswag/specs/example_group_helpers.rb:94:in `block in run_test!'

Finished in 0.4203 seconds (files took 2.58 seconds to load)
1 example, 1 failure

请帮忙。

4

0 回答 0