php-パスワードリセットバックエンド機能
ユーザーがパスワードを忘れた場合のパスワードのリセットを概念的に処理する方法に少し問題があります。私はこのSOの答えに基づいてシステムをモデル化しようとしています。
現在の設定は次のとおりです:
- ユーザーがページ上のパスワードを忘れた場合のリンクをクリックします
- このページでは、メールアドレスの入力を求められます
- ユーザーがメールアドレスを入力し、[Send memyinfo]をクリックします
- ユーザーが[Sendmymy info]を押すと、ランダムなID、時刻、およびユーザーのユーザー名を使用して、password_change_requestsテーブルに新しいエントリが作成されます。
http://mysite.net/resetpassword.php?id=xxx&username=yyy
の形式のリンクをユーザーに送信します
- resetpassword.phpファイルはIDとユーザー名を取得します
- resetpassword.phpは、password_change_requestsで、ユーザー名とまだ有効期限が切れていない時刻を持つ行をチェックします。
- 行が見つかった場合は、getからのIDがその行のハッシュIDと一致することを確認してください。
- IDが検証されたら、新しいパスワードを入力するためのフォームとボタンを使用してhtmlをエコーします
- 新しいパスワードを確認し、新しいパスワードが一致することを確認する別のphpスクリプトに新しいパスワードを送信してみてください。
verifyNewPassword.php
パスワードがverifyNewPassword.phpで一致しない場合、ユーザーをresetpassword.phpに戻す方法がわからないため、私の設計には何らかの欠陥があるはずです。クリックしてresetpassword.phpに送り返すためのリンクを提供することはできません。そのリンクには、GETからのIDとユーザー名も必要だからです。そのGETデータをresetpassword.phpからverifyNewPassword.phpに送信しようとしましたが、htmlがエコー内にあるため、理解できません。これが私のコードの要約です:
resetpassword.php:
if($ tokenFound){ エコー" <本体>
パスワードのリセット
verifyNewPassword.php:
if ($password != $confirmpassword) { print "Passwords don't match. Click <a href=\"resetpassword.php\">here</a> to try again.<br/>"; } else { echo "passes match"; }
答え :
解決策:
これをどのように記述しても、これらのxxx
と{-code-が必要になります。 2}
verifyNewPassword.phpの値。最善の解決策は、resetpassword.phpに渡されたときにこれらを非表示の入力に保存し、POSTされた値と一緒に送信し、verifyNewPassword.phpからもう一度確認することです。
リンクを避けたい場合は、 Location
ヘッダーをhttp://mysite.net/resetpassword.php?に設定して303応答を送信できます。 id = xxx&username = yyy
、エラーメッセージを表示したい場合は別のオプションのフラグを設定します。
答え :
解決策:
パスワードを確認するためにresetpasswordからidとusernameの値を渡すことになりました:
if ($tokenFound) {
echo '<html>
<body>
<h1>Password Reset</h1>
<form action="verifyNewPassword.php" method="post">
<input type="password" name="password" placeholder="New Password"><br>
<input type="password" name="confirmpassword" placeholder="Confirm New Password"><br><br>
<input type="hidden" name="username" value="' . $username . '">
<input type="hidden" name="id" value="' . $id . '">
<input type="submit" value="Reset Password">
</form>
</body>
</html>';
}
else {
//notify user token is expired or not found. try to reset password again
echo "not a valid token";
}
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。