deviseでアカウント削除時にパスワードを要求したい
ひさびさに自分用プログラミングメモをば。Railsアプリケーションを開発する際に認証機構としてdeviseをよくつかいますが、アカウントの削除時にパスワードを要求したくなったのでした。アカウント削除はインパクトが大きいので、再度ユーザーに確認を取りたかったり...という気持ちです。 DELETE
メソッドを送るときにパスワードを一緒に送り、ログインユーザーと一致した場合にのみ削除します。
How to: Soft delete a user when user deletes account · plataformatec/devise Wiki · GitHub この記事を見る感じ、RegistrationsControllerを継承したコントローラでdestroyアクションをオーバーライドすればよさそう。 ルーティングで継承した先のコントローラをつかうようにします(参照)。
# config/routes.rb devise_for :accounts, controllers: { registrations: "registrations"}
パスワードを確認し、一致した場合に削除する処理は destroy_with_password が使えそうなので、これを利用します。
# app/controllers/registrations_controller.rb class RegistrationsController < Devise::RegistrationsController def destroy result = resource.destroy_with_password(destroy_params[:current_password]) if result Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name) set_flash_message :notice, :destroyed yield resource if block_given? respond_with_navigational(resource){ redirect_to after_sign_out_path_for(resource_name) } else # パスワード認証に失敗したときの処理を書く end end def destroy_params params.require(:account).permit(:current_password) end end
これでよさそう。ではでは~。