gpt4 book ai didi

ruby-on-rails - rails : accessing current user session in a model (

转载 作者:行者123 更新时间:2023-12-04 05:39:08 24 4
gpt4 key购买 nike

使用 mod_passenger 维护部署在 Apache 上的 Rails v2.3.8 应用程序。

我需要访问其中一个模型中的当前用户 session (确切地说是审计员观察者)。
我知道这违反了 MVC 原则。但是我必须违反它,因为我有一个需要知道当前登录用户的观察者。我有很多 Controller ,调用 Auditor 记录器不会很枯燥。

我只是想能够调用 User.current 并返回当前登录的用户 session 。但是我遇到了缓存/线程安全问题。原作者使用了一个类变量(@@current)来存储当前用户。但这不是线程安全的,所以我把它变成了这个

class User < AR:Base
...
def self.current
Thread.current[:user]
end

def self.current=(user)
Thread.current[:user] = user
end
...
end

所以它应该是线程安全的。在审计员观察员中,我有一个电话:
Auditor(subject, action, object)

我在 User.current 作为主题传递的地方。

这段代码在开发中效果很好,但在生产中我从 User.current 得到了不正确的值。有时我会得到另一个登录用户的记录,而不是当前的记录。所以仍然存在一些线程安全/类缓存问题,但我不知道如何解决它。

有什么建议?
谢谢

最佳答案

ActiveRecord 和 ActionPack 完全不同,因此您无法访问模型中的 session /cookie。如果您需要当前用户,您有两个选择。

选项 1 - 将当前用户传递给模型

在您的 Controller 中:

def index
Audit.get_current_user(current_user)
#where audit is your model that you will send the current_user to
end

选项 2 - 拥有一个在修改用户对象后执行操作的用户模型。

在您的用户模型中:
before_save :adjust_user

def adjust_user
#self will be the object that was just modified aka the current user
end

关于ruby-on-rails - rails : accessing current user session in a model (,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5358928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com