私は現在、Railsプロジェクトのユーザ登録/認証にDeviseを使用しています。 ユーザーがアカウントをキャンセルする場合、ユーザーオブジェクトは次のようにソフト削除されます。Devitsでソフト削除ユーザのログインを停止する方法
How to "soft delete" user with Devise
私implmenetationは小さな違い、この方法を持っています。 ユーザーモデルに属性 'deleted_flag'があります。 そして、soft_deleteメソッドは "update_attribtue(:deleted_flag、true)"を実行します。
しかし、私はsign_inアクションを実行する必要があります。 私のimplmenetationでは次のとおりです。
class SessionsController < Devise::SessionsController
def create
resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
if resource.deleted_flag
p "deleted account : " + resource.deleted_flag.to_s
sign_out(resource)
render :controller => :users, :action => :index
else
if is_navigational_format?
if resource.sign_in_count == 1
set_flash_message(:notice, :signed_in_first_time)
else
set_flash_message(:notice, :signed_in)
end
end
sign_in(resource_name, resource)
respond_with resource, :location => redirect_location(resource_name, resource)
end
end
end
このコードには奇妙な点があります。
削除されたユーザーがサインインしようとすると、 システムはログを許可し、直ちにログアウトします。 そして、システムはフラッシュ[:警告]メッセージを表示できません...
私は2つの点を知りたいと思います。
- 削除したユーザーのログインを禁止するにはどうすれば実装できますか?
- 削除したユーザーがログインしようとすると、フラッシュ[:警告]を表示する方法を実装しますか?
実際にはユーザーのサインインと現在のセッションの抹消の両方を実際に行っているhttp://stackoverflow.com/q/8107966/249760も参照してください。 –