Undelete acts_as_paranoid удаленный пользователь при входе в систему - PullRequest
3 голосов
/ 17 января 2012

У меня есть приложение 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 звонок?

1 Ответ

5 голосов
/ 23 марта 2012

Решено с помощью следующего фрагмента кода:

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
...