Midari Create > webアプリケーション製品 > Wakarana > サンプルコード >

【Wakarana】パスワードのリセット

Wakaranaで、パスワードを忘れたユーザーに対してパスワードのリセットを実行するサンプルコードです。

このコードでは、パスワードリセットコードを記載したメールを登録されているメールアドレスに送信し、そのコードを確認してからパスワードをランダムなものに変更します。

sample_1.html

<form action="sample_2.php" method="post">
    ユーザーID <input type="text" name="user_id"><br>
    メールアドレス<input type="text" name="email_addr"><br>
    <button type="submit">送信</button>
</form>

sample_2.php

<?php
include "wakarana/main.php";

$wakarana = new wakarana();

if (isset($POST["user_id"], $POST["email_addr"])){
    $user = $wakarana->get_user($POST["user_id"]);
    
    if (is_object($user) && in_array($POST["email_addr"], $user->get_email_addresses())) {
        // ユーザーにパスワードリセットコードを発行
        $token = $user->create_password_reset_token();
        
        mail($POST["email_addr"], "パスワードリセットコード", "https://example.jp/sample_3.php?token=".$token." にアクセスしてください。");
        
        print "確認メールを送信しました。";
    } else {
        print "エラー ユーザーIDまたはメールアドレスが間違っています。";
    }
} else {
    print "エラー データが送信されていません。";
}

sample_3.php

<?php
include "wakarana/main.php";

$wakarana = new wakarana();

if (isset($_GET["token"])) {
    // 新しいパスワードとなるランダムな文字列を生成
    $new_password = wakarana::create_random_password();
    
    // パスワードリセットコードを照合してパスワードを再設定
    $user = $wakarana->reset_password($_GET["token"], $new_password);
    
    if (is_object($user)) {
         print $user->get_name()."さんのパスワードを「".$new_password."」に変更しました。";
    } else {
        print "エラー パスワードのリセットに失敗しました。";
    }
}