在我配置 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
请帮忙。