我正在使用设计作为 rails 3.2 应用程序的身份验证。我的用户模型称为用户,我一直在尝试实现软删除。我正在尝试通过使用acts_as_paranoid 来做到这一点,它会自动为您完成工作。事情按预期工作(其他人无法再看到“已删除”用户),除了我希望停用的用户仍然能够登录并看到“停用”屏幕,并让他们有机会重新激活他们的帐户。
问题是 Devise(Warden?)不再能够找到已删除的用户。如果您使用范围“with_deleted”,Acts_as_paranoid 允许您访问软删除记录。因此,我可以通过以下方式获得其中的一部分:
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
where(conditions).with_deleted.first
end
我把它放到我的用户模型中,所以现在当我输入登录信息时,我会得到我已经成功登录的闪存消息,它会触摸用户模型中的“updated_at”列并增加sign_in_count 等。但是,从经过身份验证的方法返回 false 并且 current_user 辅助方法返回 nil 的意义上,它并没有真正进行身份验证。那么让这些工作的最佳策略是什么?我可以以某种方式覆盖 current_user 方法,以便它使用 with_deleted 范围查询 User 模型吗?我是否必须对warden 做一些事情,例如像使用 find_first_by_auth_conditions 方法那样添加条件?我无法弄清楚如何做到这一点。任何帮助表示赞赏!
另外,在我让它工作之后,我想自动将所有软删除的用户发送到一个“停用”页面,他们唯一的选择是永久删除或重新激活。有没有办法通过“authenticated :user do {} end”路由来做到这一点,还是我必须在 application_controller 中放置一个 before_filter 并在每个请求时检查用户?