【Rails】デフォルトで設定されてるdeviseのパスワードバリデーションを解除・変更


はじめに

deviseでユーザーの登録内容を編集する方法

deviseでのパスワードの取り扱いは、セキュリティーの観点から編集(update)ができない仕様になっていて、しようとしても編集できず強制ログアウトされてしまう。
また、viewを編集して、入力できない様にしていてもバリデーションが発動してしまう。
なので、編集(update)のさいはそのバリデーションをoffにしなければならない。

目次

1.devise導入と各種ファイル作成・設定
2.バリデーションの解除
3.バリデーションのカスタマイズ
4.veiwページの編集

開発環境

ruby 2.6.5
rails 6.0.0
devise 4.7.3

実装

1.devise導入と各種ファイル作成・設定

deviseのインストール
rails g devise:view モデル名
ルーティングの設定

これで下準備が整いました。

2.バリデーションの解除

先ず、デバイスをインストールするとデフォルトで設定されているバリデーションを解除します。

モデルにてバリデーションの解除

model/user.rb
 devise :database_authenticatable, :registerable,
       :recoverable, :rememberable  :validatable  #←これを削除#

:validatableがデバイスのバリデーションを司ってるのでこれを削除。
手動で変更できる様になりました。
この状態で編集(update)する事ができますが、今のままだと全てがoffになってるので、新規登録(create)する時のバリデーションもoffになったままです。

3.バリデーションのカスタマイズ

新規登録(create)するときはバリデーションを発動させたいので、onオプションを使ってバリデーションのタイミングを指定。

model/user.rb
 validates :password, on: :create #←createつまり保存の時のみonにします。#
 validates :nickname, presence: true
 validates :name, presence: true

これで編集時(update)はoff、新規登録時(create)はonにする事が出きました。

4.veiwの編集

ちなみに、パスワードの変更機能自体は、「現在のパスワード」→「新しいパスワード」、、、、としていけば可能ですが、パスワードやメールアドレスは厳重なセキュリティーが必要です。
名前や住所などのページで一緒に取り扱わず、専用ページを作成する事をおすすめします。

まとめ

deviseってユーザー管理機能を実装するときに非常に便利で、ユーザーの登録を始め様々な機能が標準装備されています。
ただ、自分の思った仕様にカスタマイズするには、さまざまな操作が必要です。

最後に

私はプログラミング初学者ですが、自分と同じ様にエンジニアを目指す方々の助けになればと思い、記事を投稿しております。
それではまた次回お会いしましょう〜


参考文献
https://qiita.com/Nosuke0808/items/415a82c2cdd66fc7545c