【Rails】devise - deviseのデフォルト設定(リソース更新時にパスワードが必要)
内容
devise本家では
deviseの登録・認証を使用するモデルレコードのカラム更新にはパスワードを必要としています。
これをdevise本家のソースコードから追ってみます。
ソースコード追跡
Devise::RegistrationsController#update
アカウント更新時に発火するアクションです。
中身を見てみましょう
class RegistrationsController < Devise::RegistrationsController def update self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key) prev_unconfirmed_email = resource.unconfirmed_email if resource.respond_to?(:unconfirmed_email) resource_updated = update_resource(resource, account_update_params) # レコード更新 yield resource if block_given? ... end
update_resources
メソッドの返り値を
更新完了のリソース resources_updated
へ格納しています。
次はupdate_resources
について見てみます。
Devise::RegistrationsController#update_resources
class RegistrationsController < Devise::RegistrationsController def update_resource(resource, params) resource.update_with_password(params) end end
update_resouces(resource, params)
メソッドは
・第1引数resource
→ update_with_password
メソッドの使用対象オブジェクト
・第2引数params
→ update_with_password
メソッドに渡す引数
として、update_with_password
メソッドを発火させます。
Devise::Models::DatabaseAuthenticatable#update_with_password
update_with_password
メソッドは
メソッドの名前の通り、パスワードが正しければリソースを更新するものでした。
まとめ
deviseを適用するモデルレコード更新時に走るDevise::RegistrationsController#update
アクションの根幹に
Devise::Models::DatabaseAuthenticatable#update_with_password
メソッドがあるため、
デフォルトではリソース情報更新にパスワードが必要となっています。