登録後、仮パスワードを送信して認証し、本パスワードを設定させたい

  • 更新

質問

下記のすべてを満たす運用の方法は?

  • 登録後、暫定パスワード(仮パスワード)を送信して認証し、本番パスワード(本パスワード)を設定させたい。
  • 暫定パスワードでは登録した個人情報にはアクセスできない。
  • 暫定パスワードは本番パスワード設定後は無効化。

回答

データベースにパスワード項目を2つ作成し、暫定パスワードと本番パスワードとして運用することで可能です。
下記図のようなイメージとなります。
0000356_1.png

以下に設定手順を例示いたします。

  1. [データベース]>[項目の設定]にて、パスワード項目が2つ存在するように項目を追加します。
    それぞれ項目名を「暫定パスワード」「本番パスワード」等に設定します。
    ユーザのIDとする項目に[重複キー]のチェックを入れます。
    [次へ→]をクリックして一旦保存し、[戻る]で戻ります。

    「暫定パスワード」の[設定]を開き、「フォーム自動返信差し込み記号」の「有効」にチェックします。
    他、[自動生成時の文字数]の文字数は、暫定パスワードを伝える際の文字数となるため、希望する文字数で指定します。
    0000356_2.png
    「本番パスワード」の[設定]を開き、ユーザが設定する本番パスワードのルールを指定します。ユーザが使用するスマートフォンの自動パスワード生成機能等では、記号が利用される仕様のため、[使用できる文字種]の「記号」はチェックを入れることをおすすめします。

    [自動生成時の文字数]の文字数は、前出の運用図の『ランダム』と記載の際の桁数となるため、セキュリテイ要件等に合わせてご設定ください。(長い方がセキュリティは高い。)
    0000356_3.png
  2. フォームは下記画像のように4つ必要となります。 0000356_4.png
    • 登録:運用図①:登録フォームとして使用
    • 更新:運用図④:会員情報を閲覧できるフォーム。本パスワードでログインさせる。
    • パスワード再発行:運用図②:暫定パスワードを再発行してメールし、本番パスワード設定フォームへ誘導する
    • 更新:運用図③:暫定パスワードでログインし、本番パスワードを設定し、暫定パスワードを無効化する。
    登録、更新、パスワード再発行、更新のタイプでフォームを追加してください。(ボタンで追加できます。)
    まず、必要な4つのフォームが存在する状態にして下記手順を進めてください。
  3. 【登録フォームの作成ポイント】
    [項目]を開き、「暫定パスワード」「本番パスワード」ともに[自動生成]と設定します。 0000356_5.png
    [デザイン]を開き、[完了画面]で暫定パスワードを再送信できるように下記の要領のコードを追加します。
    
    <p>暫定パスワードが記載されたメールが届かない場合のみ下記のボタンを押して、再度暫定パスワードメールの送信を行ってください。</p>
    <br>
    <form action="//環境ID/m" method="post" autocomplete="off">
    <input type="hidden" name="e_★★" id="e_★★" value="##e_●●##" size="40" /> 
    
    <input type="submit" name="__commit" id="" value="暫定パスワードを変更" />
    
    <input type="hidden" name="p" value="1" /><input type="hidden" name="f" id="f" value="◆◆" />
    </form>
          
    • 「★★」・・・暫定パスワード再発行用フォームの[項目]内のパスワード項目のIDを記述する。
    • 「●●」・・・このフォーム(登録フォーム)の重複キー項目のフォーム項目IDを記述する。
    • 「◆◆」・・・暫定パスワード再発行用フォームのフォームIDを記述する。
    ※自動生成フォームの場合は、[テキスト]要素を追加して、[表示するテキスト]内に記述し、[HTMLタグを有効]に設定します。さらに表示画面選択のチェックボックス欄にて、完了画面以外のチェックを外します。

    続いて自動返信メールを設定します。
    [自動返信メール]を開き、[新規作成]から文面を作成します。
    [差込記号]で、暫定パスワードを差込できるよう文中に配置します。
    合わせてパスワード変更用フォーム(運用図③)のフォームURLを配置して誘導してください。
  4. 【会員情報ログインフォームの作成ポイント】
    [項目]を開き、[パスワード(認証用)]項目の[設定]を開き、[パスワード]の設定を「本番パスワード」に設定して[次へ→][実行→]で保存します。
    0000356_6.png
  5. 【暫定パスワード再発行フォームの作成ポイント】
    暫定パスワードを再発行してメールをユーザに送り、再度本番パスワードが設定できるようにするためのフォームです。
    [項目]を開き、[パスワード(再発行用)]の[設定]を開きます。
    0000356_7.png [パスワード]の項目を「暫定パスワード」で指定して保存します。
    これで、このフォーム通過時に「暫定パスワード」がランダム生成されます。 0000356_8.png
    [自動返信メール]を開きます。
    ランダムな文字列で自動生成された暫定パスワードをお知らせして、本番パスワード設定フォームへ誘導します。
    [差込記号]で、暫定パスワードを差込できるよう文中に配置します。
    合わせてパスワード変更用フォーム(運用図③)のフォームURLを配置して誘導してください。 0000356_9.png
  6. 【パスワード変更用フォームの作成ポイント】
    暫定パスワードで認証し、本番パスワードを設定する際に、合わせて既存の暫定パスワードをランダムな文字列で上書きすることで無効化するフォームです。

    [項目]を開き、 重複キー項目を「表示のみ」に設定します。
    「暫定パスワード」「本番パスワード」共に、「必須」に設定します。
    0000356_10.png
    [パスワード(認証用)]の表示名を「暫定パスワード」等設定し、[設定]を開きます。
    0000356_11.png
    [パスワード]を「暫定パスワード」に指定して保存します。
    【フォーム項目の設定】を[次へ→]で保存します。

    [デザイン]を開き、入力画面(認証画面ではなく入力)にて、下記コードを設置します。 下記コードには、暫定パスワードをランダムな生成値で上書きするコードと、重複キー項目と本番パスワードが一致していたらエラーになるコードが含まれています。
    <p id="pass_error" style="display:block;background:red;color:#fff;padding:10px;margin:5px auto;width:80%;transition: all 2s ease-out;text-align: center;visibility: hidden;opacity:0;">IDとパスワードは同じに設定できません。</p>

    <script type="text/javascript">
    addEventListener('DOMContentLoaded', function() {
    var temporary_pw = document.querySelector('#e_★★');
    var g_num = Math.floor( Math.random() * 1000001 ) ;

    var today = new Date();
    var final_value = g_num + today.getHours() + today.getMinutes() + today.getSeconds();
    temporary_pw.value = final_value.toString().padStart(7,'0');

    //自動生成対応
    const send_button = document.querySelector('input[name=__send]');

    if(send_button.getAttribute('id')== ".__send"){
    temporary_pw.closest('tr').style.cssText = "display:none;"
    const th = temporary_pw.closest('tr').previousElementSibling.lastElementChild.tagName;

    if(th == "TH"){
    temporary_pw.closest('tr').previousElementSibling.style.cssText = "display:none;";
    }
    }else{ }
    })

    const pass1 = document.querySelector('#e_◆◆');
    const pass2 = document.querySelector('#e_◆◆_re');
    const id = document.getElementById('td_●●').textContent.trim();
    const passerror = document.querySelector('#pass_error');
    const button = document.querySelector('input[name=__send]');

    pass1.addEventListener('change', (event) => {
    const pass1val = pass1.value;
    const pass2val = pass2.value;

    if(pass1val == id|pass2val == id){
    passerror.style.cssText = "display:block;background:red;color:#fff;padding:10px;margin:5px auto;width:80%;transition: all 2s ease-out;text-align: center;visibility: visible;opacity:1";
    button.disabled = true;
    }else{
    passerror.style.cssText = "display:block;background:red;color:#fff;padding:10px;margin:5px auto;width:80%;transition: all 2s ease-out;text-align: center;visibility: hidden;opacity:0;";
    button.disabled = false;
    }

    });
    pass2.addEventListener('change', (event) => {
    const pass1val = pass1.value;
    const pass2val = pass2.value;

    if(pass1val == id|pass2val == id){
    passerror.style.cssText = "display:block;background:red;color:#fff;padding:10px;margin:5px auto;width:80%;transition: all 2s ease-out;text-align: center;visibility: visible;opacity:1";
    button.disabled = true;
    }else{passerror.style.cssText = "display:block;background:red;color:#fff;padding:10px;margin:5px auto;width:80%;transition: all 2s ease-out;text-align: center;visibility: hidden;opacity:0;";;
    button.disabled = false;}
    });
    </script>

    • 「★★」・・・このフォームの[項目]内の暫定パスワード項目のIDを記述する。
    • 「●●」・・・このフォーム(登録フォーム)の重複キー項目のフォーム項目IDを記述する。
    • 「◆◆」・・・このフォームの[項目]内の本番パスワード項目のIDを記述する。
    • デザインタイプのフォームの場合は、重複キー項目のtd項目のidを「th_フォーム項目ID」で指定してください。(Javascriptを適用するため。)


    完了画面に、会員情報ログインフォームへのリンクを設定します。