将cookie会话存储添加回Rails API应用程序
我有一个Rails-API应用程序。 或多或少“开箱即用”但我想添加回基于cookie的会话存储。 这就是我所做的:
应用程序/控制器/ application_controller.rb
+ include ::ActionController::Cookies
配置/ application.rb中
+ config.middleware.insert_after ActiveRecord::QueryCache, ActionDispatch::Cookies + config.middleware.insert_after ActionDispatch::Cookies, ActionDispatch::Session::CookieStore
创建了config / initializers / secret_token.rb
+ Namespace::Application.config.secret_token = 'token'
创建了config / initializers / session_store.rb
+ Namespace::Application.config.session_store :cookie_store, :key => '_namespace_key'
当我在控制器中检查会话时,它会导致:
但是看起来确实正在写入和使用数据。
但是,在我的浏览器中,cookie本身被命名为’_session_id’而不是’_namespace_key’
我以为我添加了基于cookie的会话存储所需的每一件,但我似乎缺少别的东西。 有任何想法吗?
您需要从application.rb
文件中删除这些中间件声明并添加以下内容:
config.api_only = false
如果初始化程序中有某个配置的session_store
(您拥有),这将以您希望的方式启用会话管理。 这没有明确记录, 但这就是你应该做的 。
这里的例子。
如果您使用的是Rails 5,并希望保留config.api_only = true
,则可以扩展中间件以添加会话层,在config/application.rb
class Application < Rails::Application
之后添加此代码
config.middleware.use ActionDispatch::Cookies config.middleware.use ActionDispatch::Session::CookieStore, key: '_namespace_key'
当您想要一个api-only
支持rails api-only
应用程序但必须使用ActiveAdmin或Rails_Admin等管理面板管理用户会话时,这可能会派上用场。
忽略此行,因为您没有使用完整的Rails堆栈:
::Rails.application.config.session_store :cookie_store, :key => '_namespace_key'
因此,您的会话使用此处设置的默认会话密钥。 但是,您可以通过替换来直接传递这些参数:
config.middleware.insert_after ActionDispatch::Cookies, ActionDispatch::Session::CookieStore
有:
config.middleware.insert_after ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, :key => '_namespace_key'
这里是您可以传递的完整选项列表 (大致了解它们的默认值,因为有些可能被Rails中的模块覆盖)。