【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 "メールアドレスの変更が完了しました。";
}
}