3

我有一个 Rails 3.1.3 应用程序,devise用于用户身份验证并使用acts_as_paranoid. 我希望在重新创建密码、用户注册和用户登录时取消删除这些帐户,因此如果他们提供已删除的电子邮件,我会获取该帐户,使其再次生效,然后继续执行操作(重新创建密码或登录)。

但是在Users::SessionsController#create操作中,在取消删除用户后,它会收到一个未经授权的错误(但用户现在应该是可见的)。代码是:

def create
  # Take into account acts_as_paranoid deleted users
  resource = resource_class.only_deleted.find_by_email(params[resource_name][:email])
  resource.undelete! if resource

  resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
  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

如果我resource.reload在取消删除后添加一个电话,它不会改变任何东西。如果我再次登录,用户会正常登录,因为它在上一次尝试中未被删除。

为什么会这样?如何在一次create通话中取消删除并登录?

4

1 回答 1

5

使用以下代码片段解决了它:

def create
  # Take into account acts_as_paranoid deleted users
  if (resource = resource_class.only_deleted.find_by_email(params[resource_name][:email]))
    resource.undelete!
    # Copied from Warden::Strategies database_authenticatable:
    sign_in resource if resource.valid_password?(params[resource_name][:password])
  end
  super
end
于 2012-03-23T19:50:01.280 回答