我有一个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
创建配置/初始化器/secret_token.rb
+ Namespace::Application.config.secret_token = 'token'
创建的配置/初始化程序/session_store.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的会话存储所需的每一部分,但我似乎遗漏了一些其他的东西。
5条答案
按热度按时间eaf3rand1#
如果您使用的是Rails5,并且希望保留
config.api_only = true
,则可以扩展中间件以添加会话层,将此代码添加到config/application.rb
中的class Application < Rails::Application
之后当您希望拥有一个支持rails
api-only
的应用程序,但必须使用ActiveAdmin或Rails_Admin等管理面板来管理用户会话时,这可能会派上用场。ghhaqwfi2#
您需要从
application.rb
文件中删除这些中间件声明,并添加以下内容:如果在你的初始化器中有一个已配置的
session_store
(你已经有了),这将以你想要的方式启用会话管理。这没有明确的文档,但这是你应该做的。例如here。
fnx2tebb3#
这在Rails 6.0中很有效,
application.rb
:如果要设置自定义密钥(是的,必须设置两次):
最后,如果你想添加有效期-它在这里完成:
很想链接到文档,但是没有。
bgibtngc4#
这一行被忽略,因为您没有使用完整的Rails堆栈:
因此,您的会话将使用这里设置的默认会话密钥。不过,您可以通过替换以下内容来直接传递这些参数:
与:
下面是可以传递的选项的完整列表(对它们的默认值有一个粗略的概念,因为有些选项可能会被Rails中的模块覆盖)。
eit6fx6z5#
这个线程对我来说很神奇,我在
Rails "7.0.4"
和Ruby "3.1.2"
上下面是用户.rb