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

【Wakarana】ユーザー登録とメールアドレスの確認

Wakaranaで、登録フォームからユーザー登録を可能とする場合のサンプルコードです。

このコードでは、ユーザー登録にメールアドレスの所有者確認を要求します。

なお、このサンプルでは自動化された悪意のあるツールによる登録を検査していません。実際の環境ではCAPTCHAなどを使用して自動化されたアカウント登録をブロックする必要があります。
※Wakaranaの姉妹プロジェクト Zizai CAPTCHA もご利用いただけます。

sample_1.html

アカウントの作成前にメールアドレスを確認します。
<form action="sample_2.php" method="post">
    メールアドレス<input type="text" name="email_addr"><br>
    <button type="submit">送信</button>
</form>

sample_2.php

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

$wakarana = new wakarana();
if (empty($wakarana->search_users_with_email_address($POST["email_addr"])){
    $token = $wakarana->create_email_address_verification_token($POST["email_addr"]);
    
    mail($POST["email_addr"], "確認メール", "https://example.jp/sample_3.php?token=".$token." にアクセスしてください。");
    print "確認メールを送信しました。";
} else {
    print "エラー 既に使用されているメールアドレスです。";
}

sample_3.php

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

$wakarana = new wakarana();

$data = $wakarana->email_address_verify($_GET["token"], FALSE);
if ($data !== FALSE && empty($data["user"])) { //$data["user"]がNULLでない場合は既存ユーザーのメールアドレス変更用確認メールであるため。
    print '<form action="sample_4.php" method="post">';
    print '    ユーザーID <input type="text" name="user_id"><br>';
    print '    パスワード <input type="text" name="password"><br>';
    print '    ユーザー名 <input type="text" name="user_name"><br>';
    print '    <input type="hidden" name="token" value="'.$_GET["token"].'">';
    print '    <button type="submit">送信</button>';
    print '</form>';
}

sample_4.php

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

$wakarana = new wakarana();

if (wakarana::check_password_strength($password)) {
    $data = $wakarana->email_address_verify($_POST["token"]);
    if ($data !== FALSE && empty($data["user"])) {
        $user = $wakarana->add_user($_POST["user_id"], $_POST["password"], $_POST["user_name"]);
        $user->add_email_address($data["email_address"]);
        
        print "ユーザー登録が完了しました。";
    }
} else {
    print "エラー パスワードは10文字以上で大文字小文字数字を全て使用してください。";
}