标签: acts-as-audited

ActionController :: InvalidAuthenticityToken Rails 5/Devise/Audited/PaperTrail gem

背景细节

我正在使用Devise进行身份验证以登录到Rails 5应用程序.

每当我捆绑AuditedPaper Trail gem时,当我尝试#create一个新会话时(通过登录表单 - /users/sign_in),我收到以下错误:

ActionController::InvalidAuthenticityToken
Run Code Online (Sandbox Code Playgroud)

环境细节

Ruby 2.3.1

宝石:

  • rails 5.0.2
  • devise => 4.2.1
  • paper_trail => 7.0.1

重现步骤:

  1. 创建Rails 5应用程序
  2. 添加Devise gem
  3. 添加Audited或Paper Trail gem
  4. 尝试登录

ruby ruby-on-rails acts-as-audited devise

10
推荐指数
1
解决办法
7563
查看次数

经审核的Gem current_user_method无效

我在我的应用程序中使用Audited gem来跟踪用户日志.除了当前的用户跟踪,一切正常.

在我的情况下,我有2个模型:InstructorStudent.Instructor将是current_admin_user,我需要手动找到学生.

为了解决这个问题,我尝试current_user_method在初始化程序中覆盖并创建一个audited.rb文件,其中包含以下内容:

Audited.current_user_method = :current_admin_user
Run Code Online (Sandbox Code Playgroud)

这工作正常,但当我使用任何其他方法,如current_user_or_student...

Audited.current_user_method = :current_user_or_student
Run Code Online (Sandbox Code Playgroud)

application_controller.rb......

def current_user_or_student
  current_admin_user || InstructorStudent.find_by_id(id)
end
Run Code Online (Sandbox Code Playgroud)

它不会进入这种方法,甚至current_admin_user也不会存储在审计中.

为什么current_user_or_student在覆盖它时我的方法不被调用application_controller.rb

ruby-on-rails acts-as-audited

8
推荐指数
1
解决办法
365
查看次数

审核,查找属于用户的审核

audited用来跟踪一个名为的模型的变化Page.我希望能够找到与某个用户相关的所有审核(通过user_id审核表).

我怎样才能做到这一点?到目前为止,我发现访问Audit模型的唯一方法是这样的:

@audits = Audited::Adapters::ActiveRecord::Audit.all
Run Code Online (Sandbox Code Playgroud)

这似乎不是正确的做事方式.

尝试@audits = Audit.all给出Uninitialized constant错误.

是否有更优雅的方式与宝石提供的模型进行交互?

ruby rubygems ruby-on-rails acts-as-audited

6
推荐指数
1
解决办法
2062
查看次数

Rails - 在审计中保存租户(以前的acts_as_audited)

我已经审核(以前的acts_as_audited)设置和工作。user_id 已成功保存在审计表中,但我想不出一种有效的方法来保存tenant_id(我有带范围的多租户设置)。我曾尝试使用自述文件中描述的关联审计技术,但这对我不起作用。

我目前的解决方案是在每个模型中使用after_audit回调(可以使用 Rails 关注点实现)来获取最后一次审计并保存租户 ID:

def after_audit
  audit = Audit.last
  audit.tenant_id = self.tenant_id
  audit.save!
end
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但必须再次查询审计然后更新它似乎效率低下。在保存之前将tenant_id添加到审计中对我来说更有意义,但我不知道如何做到这一点。是否可以在保存之前将tenant_id 添加到审计中?如果是,那么如何?

编辑:

我也试过在我的审计模型中包含我的默认租户范围,但它似乎没有被调用:

审计文件

class Audit < ActiveRecord::Base
 default_scope { where(tenant_id: Tenant.current_id) }
Run Code Online (Sandbox Code Playgroud)

应用控制器.rb

class ApplicationController < ActionController::Base
  around_action :scope_current_tenant

  def scope_current_tenant
    Tenant.current_id = current_tenant.id
    yield
  ensure
    Tenant.current_id = nil
  end
Run Code Online (Sandbox Code Playgroud)

编辑:2/1/16

我仍然没有对此实施解决方案,但是我目前的想法是使用:

#model_name.rb
  def after_audit
    audit = self.audits.last
    audit.business_id = self.business_id
    audit.save!
  end
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我们获得了当前模型的最后一次审计。这样我们只处理当前模型,没有机会将审计添加到另一个业务中(据我所知)。我会将此代码添加到一个问题中以使其保持干燥。

我仍然无法让正常的 Rails 回调在审计模型中工作。我目前看到的唯一另一种方法是 fork 和修改 gem 源代码。

ruby-on-rails multi-tenant acts-as-audited ruby-on-rails-4

6
推荐指数
1
解决办法
553
查看次数

Rails - 设计和acts_as_audited

嘿,我想一起使用 Devise 和 act_as_audited 但是当我尝试使用 -

class ApplicationController < ActionController::Base
 audit Candidate
 protected

 def current_user
   @user = User.find(user_session)    
 end
Run Code Online (Sandbox Code Playgroud)

我收到这个错误。

stack level too deep
Run Code Online (Sandbox Code Playgroud)

我需要以不同的方式做吗?

谢谢

ruby-on-rails acts-as-audited devise

3
推荐指数
1
解决办法
1890
查看次数

Rails 5-使用经过审核的gem查看更改

在为学习RoR而构建的应用中,我想添加变更跟踪并为此使用Audited gem。虽然很清楚如何将其添加到模型中,但如何查看更改?

我想在每个页面上为不同的对象/类/模型添加一个链接/按钮,以打开带有审核日志的视图。即列出所有更改(日期/时间,字段,旧值,新值,按用户),并按更改的日期/时间排序。

找不到任何文档。所有帮助入门的帮助。

ruby-on-rails acts-as-audited ruby-on-rails-5

3
推荐指数
1
解决办法
1643
查看次数