Я использую Devise в качестве аутентификации для приложения rails 3.2. Моя пользовательская модель называется User, и я пытался реализовать обратимое удаление. Я пытаюсь сделать это с помощью act_as_paranoid, который автоматически делает всю работу за вас. Все работает так, как ожидалось (другие больше не могут видеть «удаленного» пользователя), за исключением того, что я хочу, чтобы деактивированный пользователь по-прежнему мог войти в систему и видеть «деактивированный» экран и дать им возможность повторно активировать свою учетную запись.
Проблема в том, что Devise (Warden?) больше не может найти удаленного пользователя. Acts_as_paranoid позволяет вам получить доступ к обратимо удаленным записям, если вы используете область «with_deleted». Итак, я могу пройти часть пути с помощью:
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, чтобы он запрашивал модель User с областью действия with_deleted? Нужно ли мне что-то делать с надзирателем, например добавлять условия, как я сделал с методом find_first_by_auth_conditions? Я не могу понять, как это сделать. Любая помощь приветствуется!
Кроме того, после того, как я заработаю, я хотел бы автоматически отправлять всех мягко удаленных пользователей на «деактивированную» страницу, где их единственными вариантами являются окончательное удаление или повторная активация. Есть ли способ сделать это с помощью маршрутизации через «аутентифицированный: user do {} конец», или мне нужно поместить before_filter в application_controller и проверять пользователей при каждом запросе?