【问题标题】:Rails / Devise: Set session and cookies without creating a User?Rails / Devise:在不创建用户的情况下设置会话和cookie?
【发布时间】:2021-04-25 14:47:09
【问题描述】:

我想创建一个会话并为该会话实例设置 cookie

尤其是为了将不同的匿名请求关联到一个浏览器(或分别关联到一台机器上的多个浏览器)并能够符合 GDPR。

基本上不需要为此创建User 模型的实例。跟踪ActiveRecord::SessionStore 中的会话就足够了。

documentation 表示需要一个数据库表才能明显地跟踪会话。

Devise 不提供创建裸 Session 的可能性,对吧?

所以我不得不求助于ActiveRecord::SessionStore::SessionActiveRecord::SessionStore 来创建裸会话...(?)

同时使用 Rails 和 Devise 会话是否可行?如上所述的匿名请求的 Rails 会话和登录用户的设计会话。 我没有看到这里的冲突。

如果不是因为当前请求的 Devise 会话和 Rails 会话都可以通过 session[]-Hash 获得。

我不知道,当我开始为登录用户使用 Rails Sessions 和 Devise Sessions 时,是否会产生名称冲突。

这么多, 我感谢每一个答案。

冯·斯波茨

【问题讨论】:

    标签: ruby-on-rails ruby session devise


    【解决方案1】:

    devise gem 设计为与User 模型一起使用,并假设该表中有记录。我认为你想要的是不向设计进行身份验证。

    要使用设计,你有这样的地方:

    before_action :authenticate_user!
    

    在您的控制器中。您只需不要将其包含在要跳过设计身份验证的控制器中。如果这是在基础ApplicationController 中,那么您可以使用skip_before_action 或仅在需要身份验证的那些控制器中使用上面的before_action

    会话由 Rails 管理,而不是设计。 (实际上它是由机架层管理的。)因此使用会话哈希不会有任何问题,并且它对于会话来说是唯一的。

    【讨论】:

    • 谢谢。找到答案。
    • 请问您,您似乎对设计很了解,在config/routes.rb 中使用authenticated :user do 块和在UsersController 中使用before_action :authenticate! 之间的区别是什么?我最终会把这个问题变成一个自己的话题。谢谢。这么久。
    • 我不知道,但我猜应该没有区别。
    猜你喜欢
    • 2015-10-14
    • 2023-03-12
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多