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

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

ただいまの
回答率

90.99%

  • Ruby on Rails

    6223questions

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

  • Devise

    212questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 243

pecchan

score 174

Ruby on Rails5です。

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

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

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

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

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

宜しくお願い致します。

#モデル
#employee.rb
class Employee < ApplicationRecord

  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  #バリデーション
  validates :emp_code, presence: true, uniqueness: true
  validates :emp_name, presence: true

  validate :password_complexity
  def password_complexity
    if password.present?
       if !password.match(/([0-9].*[a-zA-Z]|[a-zA-Z].*[0-9])/) 
         errors.add :password, "は英語と数字を含むパスワードにして下さい"
       end
    end
  end



end
#ビュー
#edit.html.erb

        <div class="container-fluid">
            <div class="row">
                <div class="col-xs-4 col-xs-offset-2" >
                    <h1 class="page-title">社員の編集</h1>
                </div>

                <div class="col-xs-8 col-xs-offset-2" >
                    <div class="contents-box">
                        <%= form_for @employee do |form| %>
                        <%= render 'form', form: form %>
                        <p><%= form.submit "更新", class: "btn btn-primary" %></p>
                        <% end %>

                        <p><%= link_to '削除する', @employee, method: :delete, data:
                        { confirm: "本当に<strong>「#{@employee.emp_name}</strong>」を削除してよろしいですか?",
                        cancel: "やめる",
                        commit: "削除する"}, title: "削除の確認" %></p>


                    </div>




                </div>
            </div>
        </div><!-- /container -->
#ビュー
#_form.html.erb
<%= render "shared/errors", obj: @employee %>

<table class="table ">
    <tr>
        <th><%= form.label :emp_code, "社員コード" %></th>
        <td><%= form.text_field :emp_code %></td>
    </tr>

    <tr>
        <th><%= form.label :emp_name, "社員名" %></th>
        <td><%= form.text_field :emp_name %></td>
    </tr>

    <tr>
        <th><%= form.label :email , "メール" %></th>
        <td><%= form.text_field :email  %></td>
    </tr>

    <tr>
        <th><%= form.label :password  , "パスワード" %></th>
        <td><%= form.text_field :password   %></td>
    </tr>

    <tr>
        <th><%= form.label :password_confirmation   , "パスワード確認用" %></th>
        <td><%= form.text_field :password_confirmation    %></td>
    </tr>

    <tr>
        <th><%= form.label :retire_date,  "退職日" %></th>
        <td><%= form.text_field :retire_date, class: 'date-picker' %></td>
    </tr>

</table>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/26 15:38

    有難う御座います。
    参考になります。

    社内の人事部の担当者だけが変更したいのですが
    仕様的に見直すべきでしょうか?

    キャンセル

  • 2017/10/26 15:52 編集

    「変更できるようにする」ために、「もとの値を書き戻す」必然性はまったくありません。

    パスワード欄が空欄で出るのが気持ち悪いなら、フォームに「パスワード変更」ボタンを付けて、それを押したときだけパスワード欄を表示する、というように、フォームの表示として対応しましょう。

    キャンセル

  • 2017/10/26 15:52

    有難う御座います。

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

    キャンセル

+2

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/26 15:36

    chelsy7110様

    有難う御座います。大変参考になります。

    今回は、Webサービスなどではなく社内専用のシステムです。

    社内の人事部の担当者だけが変更したいのです。
    これは、仕様的におかしいとは思えません。
    当然、アクセス権などの権限管理も伴った上です。

    このような場合は、どうすべきでしょうか?

    キャンセル

  • 2017/10/26 15:43

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

    キャンセル

  • 2017/10/26 15:44

    そういうことですね。
    すいません。やっと理解できました。

    有難う御座いました!

    キャンセル

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

  • ただいまの回答率 90.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby on Rails

    6223questions

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

  • Devise

    212questions

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