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

【Wakarana】既存ユーザーにメールアドレスを確認してから追加

Wakaranaで、メールアドレスの確認を行ってから既存ユーザーに追加する場合のサンプルコードです。

Wakaranaでは、既存ユーザーに対して発行されたメールアドレス確認コードを確認する場合でも、新規ユーザーの場合同様にwakarana::email_address_verify関数を使用します。

sample_1.php

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

$wakarana = new wakarana();

// アクセスしているユーザーのwakarana_userクラスを取得
$user = $wakarana->check();
if (!is_object($user)) {
    print "ログインしていません";
    exit();
}

// CSRF対策としてワンタイムトークンを使用する
$token = $user->create_one_time_token();

print '<form action="sample_2.php" method="post">';
print '    <input type="hidden" name="token" value="'.$token.'">';
print '    新しいメールアドレス <input type="hidden" name="email_addr">';
print '    <button type="submit">送信</button>';
print '</form>

sample_2.php

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

$wakarana = new wakarana();

$user = $wakarana->check();
if (!is_object($user)){
   print "ログインしていません";
    exit()
}

if (empty($wakarana->search_users_with_email_address($POST["email_addr"])){
    $token = $user->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();

if (isset($_get["token"])) {
    $data = $wakarana->email_address_verify($_POST["token"]);
    
    // 既存ユーザーと紐付けられている確認コードならば、wakarana::email_address_verifyの返り値にwakarana_userインスタンスが含まれる
    if ($data !== FALSE && is_object($data["user"])) {
        // メールアドレスの変更処理
        $data["user"]->add_email_address($data["email_address"]);
        
        print "メールアドレスの変更が完了しました。";
    }