1

我正在使用 Devise 处理 Rails 应用程序中的身份验证,并且正在使用 Permanent_records 软删除用户。我的 User 模型的默认范围是未删除的用户。如果用户删除(停用)他的帐户,我希望他能够通过登录重新激活他的帐户,类似于 Facebook 的做法。问题是,由于 Devise 不知道查找已删除的用户,因此找不到帐户。我考虑过覆盖 session#create 方法

 def create
    self.resource = warden.authenticate!(auth_options)
    set_flash_message(:notice, :signed_in) if is_navigational_format?
    sign_in(resource_name, resource)
    respond_with resource, :location => after_sign_in_path_for(resource)
  end

但由于这是由 Warden 处理的,看来我很不走运。我担心如果我开始挖得太深,我会开始破坏东西。

有任何想法吗?

谢谢!

4

2 回答 2

4

你需要:

  1. 覆盖find_for_authentication用户模型中的方法以允许查找任何用户https://github.com/plataformatec/devise/blob/master/lib/devise/models/authenticatable.rb#L229

  2. 在您的模型中重新定义after_database_authentication方法以在此处删除已删除的标志https://github.com/plataformatec/devise/blob/master/lib/devise/models/database_authenticatable.rb#L98

就是这样,我相信。无需触摸控制器动作。

于 2013-04-04T21:09:23.100 回答
0

这适用于偏执狂宝石:

class << self
  def find_for_authentication(conditions)
    User.unscoped do
      user = super(conditions)
      user.restore!(recursive: true) if user.deleted?
      user
    end
  end
end
于 2016-04-21T04:08:34.523 回答