0

パスワードリセットページを書いています。

論理:

  1. ユーザーがpwを要求する
  2. / reset /に追加された一意の文字列(有効期限が切れます)を使用して電子メールに送信されます$string
  3. コントローラのページにアクセスしたら、文字列がデータベースの文字列と一致するかどうかを確認します。一致する場合は、それをuserIdと一致させます。
  4. もしそうなら、私は彼らが彼らの新しいパスを入力することを許可します
  5. 彼らが同じコントローラーにPOSTし、混乱して2つの間違ったパスワードを入力すると、リセット文字列を含む元のURLが失われるため、データベースで更新するユーザーがわかりません。

私のオプション(私が考えることができる):

  1. セッションで文字列とユーザーIDを設定し、それをコントローラーで検索します(パスが正常にリセットされたら、必ずこれをクリアしてください)
  2. 上記のステップ4では、フォームの非表示の入力フィールドにユーザーのIDを追加し、それをPOSTして、それがどのユーザーであるかを確認します。
4

2 に答える 2

1

私はこれを行います:

  1. ユーザーはフォームで自分の電子メールを提供し、パスワードのリセットを要求します。
  2. メールに一致するuid(ユーザーID)のデータベースを確認します。
  3. ユーザーが存在する場合は、次のようなURLを作成します: http ://domain.com/password_reset.php?uid = xxxx&key = fdhgf5115d4f15dfdb5fdf5
  4. キーは次のように生成されます:$ key = md5(uniqid())
  5. キーをuidとのセッションに保存します。$_SESSION ['pass_res'] ['key'] = $ key; $ _SESSION ['pass_res'] ['uid'] = $ uid;
  6. ユーザーがURLをクリックすると、次のことを確認します。$ _SESSION ['pass_res'] ['uid'] == $_GET['uid']および$_SESSION['pass_res'] ['key'] == $ _GET [ '鍵']
  7. それらが一致する場合は、ユーザーが自分のパスワードを変更できるようにします
  8. そしてこのunset($ _SESSION ['pass_res'])の後
  9. また、ユーザーがブラウザを閉じると、セッションが期限切れになります

このようにして、パスワードのリセットを要求したセッションIDを持つユーザーのみがパスワードを変更できます。

于 2012-09-21T18:50:16.853 に答える
0

オプション2(非表示の入力にトークンを追加する)のソリューションは理にかなっています。または、フォームを同じURL(トークンが含まれているURL)に投稿して、ロジックを構造化して、フォームが投稿されたかどうか。

ロジックは次のようになります。

  • ユーザーがsite.com/password/reset/token_hereをGETまたはPOSTとしてヒットします
  • データベースのURLからトークンをチェックして、そのトークンが有効で最新かどうかを確認します
  • リクエスト方法がPOSTの場合は、一致する安全なパスワードを確認してください
    • パスワードが一致しない場合は、エラーメッセージをHTMLビューに割り当てます
    • パスワードが一致する場合は、パスワードを変更し、トークンを削除し、成功ページにリダイレクトします
  • ユーザーにフォームを表示-トークンを使用して同じURLにフォームを投稿します
于 2012-09-21T18:41:30.987 に答える