質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

1032閲覧

【RoR+Devise】編集画面にてパスワードだけ空で表示されてしまう

pecchan

総合スコア555

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2017/10/26 06:16

Ruby on Rails5です。

scaffoldにて作成した社員マスタに、
Deviseを導入し、ログイン機能などを実装しました。

ところが社員マスタの編集画面を開くと、パスワードだけ空白なんです。

編集画面を表示した状態
イメージ説明

どうすればパスワードも編集画面にセットしてくれるでしょうか?

仕様的(この画面でパスワード変更できること)には、問題ないです。

宜しくお願い致します。

Ruby

1 2#モデル 3#employee.rb 4class Employee < ApplicationRecord 5 6 # Include default devise modules. Others available are: 7 # :confirmable, :lockable, :timeoutable and :omniauthable 8 devise :database_authenticatable, :registerable, 9 :recoverable, :rememberable, :trackable, :validatable 10 11 #バリデーション 12 validates :emp_code, presence: true, uniqueness: true 13 validates :emp_name, presence: true 14 15 validate :password_complexity 16 def password_complexity 17 if password.present? 18 if !password.match(/([0-9].*[a-zA-Z]|[a-zA-Z].*[0-9])/) 19 errors.add :password, "は英語と数字を含むパスワードにして下さい" 20 end 21 end 22 end 23 24 25 26end 27

Ruby

1 2#ビュー 3#edit.html.erb 4 5 <div class="container-fluid"> 6 <div class="row"> 7 <div class="col-xs-4 col-xs-offset-2" > 8 <h1 class="page-title">社員の編集</h1> 9 </div> 10 11 <div class="col-xs-8 col-xs-offset-2" > 12 <div class="contents-box"> 13 <%= form_for @employee do |form| %> 14 <%= render 'form', form: form %> 15 <p><%= form.submit "更新", class: "btn btn-primary" %></p> 16 <% end %> 17 18 <p><%= link_to '削除する', @employee, method: :delete, data: 19 { confirm: "本当に<strong>「#{@employee.emp_name}</strong>」を削除してよろしいですか?", 20 cancel: "やめる", 21 commit: "削除する"}, title: "削除の確認" %></p> 22 23 24 </div> 25 26 27 28 29 </div> 30 </div> 31 </div><!-- /container --> 32 33 34 35

ruby

1 2#ビュー 3#_form.html.erb 4<%= render "shared/errors", obj: @employee %> 5 6<table class="table "> 7 <tr> 8 <th><%= form.label :emp_code, "社員コード" %></th> 9 <td><%= form.text_field :emp_code %></td> 10 </tr> 11 12 <tr> 13 <th><%= form.label :emp_name, "社員名" %></th> 14 <td><%= form.text_field :emp_name %></td> 15 </tr> 16 17 <tr> 18 <th><%= form.label :email , "メール" %></th> 19 <td><%= form.text_field :email %></td> 20 </tr> 21 22 <tr> 23 <th><%= form.label :password , "パスワード" %></th> 24 <td><%= form.text_field :password %></td> 25 </tr> 26 27 <tr> 28 <th><%= form.label :password_confirmation , "パスワード確認用" %></th> 29 <td><%= form.text_field :password_confirmation %></td> 30 </tr> 31 32 <tr> 33 <th><%= form.label :retire_date, "退職日" %></th> 34 <td><%= form.text_field :retire_date, class: 'date-picker' %></td> 35 </tr> 36 37</table> 38

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

データベースのemployeesテーブルを見てみてください。
passwordというカラムはありませんよね?
passwordというカラムがないのですから空欄になるというわけです。

そもそもパスワードを再表示するという動き自体がダメです。
理由の1点目として、deviseではパスワードは暗号化を行い保存しています。
基本的にパスワードは復号化して元のパスワードに戻すことは出来ないと思ってください。
そうでなければ、他人のパスワードを知ることが出来てしまうからです。
これは技術的に出来ない理由です。

理由の2点目として、表示してしまうと誰かに見られてしまう可能性が高まるという点があります。
ログインフォームでパスワードを打ち込む部分は文字が隠れていますよね?
それは誰かに見られてもわからないようにするためです。
そういうことをしているのに、編集画面で表示してしまうと隣の席の方も簡単に見ることができますよね?
これはセキュリティ的にやってはいけないという理由です。

世の中にサイトは星の数ほどありますが、その中で編集中に設定中のパスワードをそのまま出すサイトはほぼ無いと思います。
(もしあったらそのサイトはおかしいので登録解除したほうがいいと思います。)
それは上記の様にそうなっている理由があるからです。

投稿2017/10/26 06:32

chelsy7110

総合スコア596

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pecchan

2017/10/26 06:36

chelsy7110様 有難う御座います。大変参考になります。 今回は、Webサービスなどではなく社内専用のシステムです。 社内の人事部の担当者だけが変更したいのです。 これは、仕様的におかしいとは思えません。 当然、アクセス権などの権限管理も伴った上です。 このような場合は、どうすべきでしょうか?
chelsy7110

2017/10/26 06:43

maisumakunさんも仰られているように、技術的に不可能です。 変更するだけならば、今のまま空欄でもできます。 ただ、設定されてあるパスワードを表示するのは、技術的に不可能ですし、セキュリティ的にもダメですという話です。
pecchan

2017/10/26 06:44

そういうことですね。 すいません。やっと理解できました。 有難う御座いました!
guest

0

ベストアンサー

それはdeviseのデフォルト設定ではできませんし、実装しないほうがいいです

というのも、deviseのデフォルト設定でパスワードを保存すると、それは不可逆に暗号化されて、誰にも戻せない状態となっているからです。

投稿2017/10/26 06:29

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pecchan

2017/10/26 06:38

有難う御座います。 参考になります。 社内の人事部の担当者だけが変更したいのですが 仕様的に見直すべきでしょうか?
maisumakun

2017/10/26 06:52 編集

「変更できるようにする」ために、「もとの値を書き戻す」必然性はまったくありません。 パスワード欄が空欄で出るのが気持ち悪いなら、フォームに「パスワード変更」ボタンを付けて、それを押したときだけパスワード欄を表示する、というように、フォームの表示として対応しましょう。
pecchan

2017/10/26 06:52

有難う御座います。 言われてみれば本当ですね。 良いアイディアですね! 有難う御座います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問