ruby Rails 7.0.4 API应用程序,带有设备抛出DisabledSessionError

fquxozlt  于 2023-06-22  发布在  Ruby
关注(0)|答案(1)|浏览(70)

我正在开发一个API应用程序,我使用Devise登录Cinema所有者来更新和编辑Cinema的广告牌。
我在使用MiniTest进行简单测试时遇到了一个错误:

test "should get index" do
  sign_in users(:one)
  get movies_url, as: :json
  assert_response :success
end
Minitest::UnexpectedError: ActionDispatch::Request::Session::DisabledSessionError: Your application has sessions disabled. To write to the session you must first configure a session store
    test/controllers/movies_controller_test.rb:11:in `block in <class:MoviesControllerTest>'
test/controllers/movies_controller_test.rb:11:in `block in <class:MoviesControllerTest>'

我已经在Github上搜索了这个问题,并尝试在application.rb中添加以下内容:

config.session_store :cookie_store, key: '_interslice_session'
config.middleware.use ActionDispatch::Cookies
config.middleware.use config.session_store, config.session_options

我也试着去修复

module RackSessionFixController
  extend ActiveSupport::Concern

  class FakeRackSession < Hash
    def enabled?
      false
    end
  end

  included do
    before_action :set_fake_rack_session_for_devise
    
    private

    def set_fake_rack_session_for_devise
      request.env['rack.session'] ||= FakeRackSession.new
    end
  end
end

但也不管用。请注意,只有在使用MiniTest进行单元测试时才会发生这种情况。我正在测试一个控制器(电影),其中需要登录才能进行任何操作(如创建,更新和删除)。

xa9qqrwz

xa9qqrwz1#

我经历过这个问题。在我的例子中,是密码重置后的自动签名过程导致了错误。我尝试了你描述的所有解决方案,和你一样,它从来没有为我工作。下面是我如何轻松地解决我的问题,并保留API only模式。

# config/initializers/devise.rb
config.sign_in_after_reset_password = false
# config/routes.rb
devise_for :users, defaults: { format: :json }, only: [:passwords, :sessions]

如果在这种特殊情况下,问题与自动签名没有直接关系,那么简单地将会话添加到路由就足够了。

相关问题