为什么 session[:] 在 grape - rails 中不起作用?

Why doesn't session[:] work in grape - rails?

我正在使用 Rails 和 Grape 作为 API。我很好奇为什么葡萄中没有 session[:something] 方法?我可以创建 cookie,但也不能创建签名 cookie。它给我一个错误。

Grape 是用于构建 API 的轻量级框架,当您向 Grape API 端点发送请求时,响应不会通过所有 Rails 中间件相反,它通过一组薄的 Rack 中间件。因此,Grape 专为构建 API 而设计,您可以根据需要插入所需的中间件。主要目标是使 API 尽可能轻便,并实现高效的速度和性能。

如果你想在安装在 Rails 上的 Grape 中启用会话,你需要使用 ActionDispatch::Session::CookieStore 中间件。

class API < Grape::API
  use ActionDispatch::Session::CookieStore

  helpers do
   def session
     env['rack.session']
   end
  end

  post :session do
   session[:foo] = "grape"
  end

  get :session do
    { session: session[:foo] }
  end
end

您可以使用 grape_session gem 来达到上述目的。

如果您想要在没有 Rails 中间件的 Rack 应用程序中使用会话的默认方式,请使用 Rack 中可用的默认 Rack::Session::Cookie 中间件。