Rails 3.2 アプリの認証として Devise を使用しています。私のユーザー モデルは User と呼ばれ、論理的な削除を実装しようとしています。私はacts_as_paranoidを使用してこれを実行しようとしています.acts_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」列に触れて、ただし、認証されたメソッドが false を返し、current_user ヘルパー メソッドが nil を返すという意味では、実際には認証されません。では、これらを機能させるための最善の戦略は何ですか? with_deleted スコープで User モデルをクエリするように current_user メソッドをオーバーライドできますか? find_first_by_auth_conditions メソッドで行ったように条件を追加するなど、warden で何かをする必要がありますか? これを行う方法がわかりません。どんな助けでも大歓迎です!
また、機能させた後、すべてのソフト削除されたユーザーを「非アクティブ化」ページに自動的に送信したいと思います。ここで唯一のオプションは、完全に削除または再アクティブ化することです。「authenticated :user do {} end」を介したルーティングでこれを行う方法はありますか?それとも、application_controller に before_filter を入れて、リクエストごとにユーザーをチェックする必要がありますか?