質問
下記のすべてを満たす運用の方法は?
- 登録後、暫定パスワード(仮パスワード)を送信して認証し、本番パスワード(本パスワード)を設定させたい。
- 暫定パスワードでは登録した個人情報にはアクセスできない。
- 暫定パスワードは本番パスワード設定後は無効化。
回答
データベースにパスワード項目を2つ作成し、暫定パスワードと本番パスワードとして運用することで可能です。
下記図のようなイメージとなります。
以下に設定手順を例示いたします。
- [データベース]>[項目の設定]にて、パスワード項目が2つ存在するように項目を追加します。
それぞれ項目名を「暫定パスワード」「本番パスワード」等に設定します。
ユーザのIDとする項目に[重複キー]のチェックを入れます。
[次へ→]をクリックして一旦保存し、[戻る]で戻ります。
「暫定パスワード」の[設定]を開き、「フォーム自動返信差し込み記号」の「有効」にチェックします。
他、[自動生成時の文字数]の文字数は、暫定パスワードを伝える際の文字数となるため、希望する文字数で指定します。
「本番パスワード」の[設定]を開き、ユーザが設定する本番パスワードのルールを指定します。ユーザが使用するスマートフォンの自動パスワード生成機能等では、記号が利用される仕様のため、[使用できる文字種]の「記号」はチェックを入れることをおすすめします。
[自動生成時の文字数]の文字数は、前出の運用図の『ランダム』と記載の際の桁数となるため、セキュリテイ要件等に合わせてご設定ください。(長い方がセキュリティは高い。) - フォームは下記画像のように4つ必要となります。
- 登録:運用図①:登録フォームとして使用
- 更新:運用図④:会員情報を閲覧できるフォーム。本パスワードでログインさせる。
- パスワード再発行:運用図②:暫定パスワードを再発行してメールし、本番パスワード設定フォームへ誘導する
- 更新:運用図③:暫定パスワードでログインし、本番パスワードを設定し、暫定パスワードを無効化する。
まず、必要な4つのフォームが存在する状態にして下記手順を進めてください。 - 【登録フォームの作成ポイント】
[項目]を開き、「暫定パスワード」「本番パスワード」ともに[自動生成]と設定します。
[デザイン]を開き、[完了画面]で暫定パスワードを再送信できるように下記の要領のコードを追加します。
<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を記述する。
続いて自動返信メールを設定します。
[自動返信メール]を開き、[新規作成]から文面を作成します。
[差込記号]で、暫定パスワードを差込できるよう文中に配置します。
合わせてパスワード変更用フォーム(運用図③)のフォームURLを配置して誘導してください。 - 【会員情報ログインフォームの作成ポイント】
[項目]を開き、[パスワード(認証用)]項目の[設定]を開き、[パスワード]の設定を「本番パスワード」に設定して[次へ→][実行→]で保存します。 - 【暫定パスワード再発行フォームの作成ポイント】
暫定パスワードを再発行してメールをユーザに送り、再度本番パスワードが設定できるようにするためのフォームです。
[項目]を開き、[パスワード(再発行用)]の[設定]を開きます。[パスワード]の項目を「暫定パスワード」で指定して保存します。
これで、このフォーム通過時に「暫定パスワード」がランダム生成されます。
[自動返信メール]を開きます。
ランダムな文字列で自動生成された暫定パスワードをお知らせして、本番パスワード設定フォームへ誘導します。
[差込記号]で、暫定パスワードを差込できるよう文中に配置します。
合わせてパスワード変更用フォーム(運用図③)のフォームURLを配置して誘導してください。 - 【パスワード変更用フォームの作成ポイント】
暫定パスワードで認証し、本番パスワードを設定する際に、合わせて既存の暫定パスワードをランダムな文字列で上書きすることで無効化するフォームです。
[項目]を開き、 重複キー項目を「表示のみ」に設定します。
「暫定パスワード」「本番パスワード」共に、「必須」に設定します。
[パスワード(認証用)]の表示名を「暫定パスワード」等設定し、[設定]を開きます。
[パスワード]を「暫定パスワード」に指定して保存します。
【フォーム項目の設定】を[次へ→]で保存します。
[デザイン]を開き、入力画面(認証画面ではなく入力)にて、下記コードを設置します。 下記コードには、暫定パスワードをランダムな生成値で上書きするコードと、重複キー項目と本番パスワードが一致していたらエラーになるコードが含まれています。
<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を適用するため。)
完了画面に、会員情報ログインフォームへのリンクを設定します。