13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-10-07

#はじめに
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

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?