我有一个Rails API应用程序.或多或少是"开箱即用",但我想重新添加基于cookie的会话存储.以下是我所做的:

应用程序/控制器/应用程序/控制器.rb

+ include ::ActionController::Cookies

配置/应用程序.rb

+ config.middleware.insert_after ActiveRecord::QueryCache, ActionDispatch::Cookies
+ config.middleware.insert_after ActionDispatch::Cookies, ActionDispatch::Session::CookieStore

已创建配置/初始值设定项/秘密令牌.rb

+ Namespace::Application.config.secret_token = 'token'

创建了配置/初始化器/会话存储.rb

+ Namespace::Application.config.session_store :cookie_store, :key => '_namespace_key'

当我在控制器中判断会话时,结果是:

<Rack::Session::Abstract::SessionHash:0x3fdadc5daa24 not yet loaded>

然而,数据似乎正在被写入和使用.

但是,在我的浏览器中,cookie本身被命名为"_session_id",而不是"_namespace_key"

我以为我把基于cookie的会话存储所需的每一部分都加了回go ,但我似乎缺少了其他东西.有什么 idea 吗?

推荐答案

您需要从application.rb文件中删除这些中间件声明,并添加以下内容:

config.api_only = false

如果初始化器中有配置的session_store,这将以您想要的方式启用会话管理.这没有明确的记录,but that's what you're supposed to do.

here.

Ruby-on-rails相关问答推荐

使用超级用户角色和未知密码创建与POSTRES用户的连接

Gemfile需要较新版本的依赖项

在URL中将下划线更改为连字符Ruby on Rails

ActiveRecord::声明在类别中无效#new

如何将 ActionController::RoutingError 分类为 Sentry 中的错误

Ruby - 如何删除目录中早于 X 天的所有文件?

Ruby on Rails 让外键工作

只允许用户在 Rails 中输入字母和数字

heroku 推送错误:无法检测到 rake 任务

ActiveRecord 包括.指定包含的列

如何在 Windows 中更新 ruby

验证以确保唯一性但忽略空值?

在命名空间内设计

如何将自定义过滤器添加到 Active Admin?

从子类中的重载方法调用基类方法

如何将 yaml 文件解析为 ruby​​ 哈希和/或数组?

Rspec/Capybara 正在加载,循环要求被认为是有害的

通过重定向使闪存哈希保持不变

使用redirect_to后如何停止控制器执行? (使用导轨)

在 Rails 中显示主机名和数据库名