【訂正】ブログを簡単に見るヤツ7
メールアドレスを変更する処理の修正版です。
メールアドレスを変更する場合は、メールアドレス変更確認メールを送信するようにします。
確認メールから、メールアドレス変更URLにアクセスすることで変更完了とする。
まず、必要なパラメータ。
ID アカウントのID
MAIL設定する値変更するメールアドレス
処理の流れ
1.ログインチェック → ログインしていなかったら、セッションクリアしてTOPにリダイレクト
2.パラメータチェック → エラーがあったら、X-StatにERR_PARAMETER(401)を設定してレスポンス。
・ID 数値であること。
・MAIL 正しいメールアドレス形式であること。
3.設定対象のIDが存在すること。 → 存在しない場合は、X-StatにERR_NOTFOUND(402)を設定してレスポンス。
存在するか確認する方法
4.変更するメールアドレスが既に登録されていないか確認。 → 既に登録されている場合は、X-StatにERR_MAIL_ALREADY(304)を設定してレスポンス。
5.メールアドレスを取得。
使用するSQL
select MAIL from tbl_user where ID = ?
$stmt->bind_param("i", $id);
6.トークン作成
メールアドレスとタイムスタンプをくっつけた物をmd5+base64したヤツ。
7.メールアドレス変更テーブルに「ID・変更前アドレス・変更後アドレス・トークン・日時」を登録。IDが存在する場合は、上書き。
使用するSQL
(存在する場合) update tbl_mailtemp set MAILNEW = ?, MAILOLD = ?, TOKEN = ? where ID = ?
$stmt->bind_param("ssi", $mailnew, $mailold, $token, $id);
(存在しない場合)insert into tbl_mailtemp (ID, MAILNEW, MAILOLD, TOKEN) values (?, ?, ?, ?)
$stmt->bind_param("iss", $id, $mailnew, $mailold, $token);
8.変更後メールアドレスに、メールアドレス変更確認メールを送信する。送信に失敗した場合は、X-StatにERR_MAIL(504)を設定してレスポンス。
9.X-StatにSUCCESS(200)を設定してレスポンス。
メールアドレス変更URLにアクセスしてからの処理。
1.パラメータチェック → エラーがあった場合は、エラー画面。
・ID 数値であること。
・TOKEN 設定されていること。
2.メールアドレス変更テーブルに、IDが登録されているか確認。 → 登録されていない場合は、エラー画面。
3.メールアドレス変更テーブルから「変更前アドレス・変更後アドレス・日時」を取得
SQL
select MAILNEW, MAILOLD, UNIX_TIMESTAMP(DATE) from tbl_mailtemp where ID = ? and TOKEN = ?
$stmt->bind_param("is", $id, $token);
4.メールアドレス変更テーブルの、更新対象レコードの更新日時から24時間以上経っていないか確認。
→24時間以上経っている場合は、無効なアクセスとする。メールアドレス変更テーブルからレコードを削除する。
メールアドレスを変更する場合は、メールアドレス変更確認メールを送信するようにします。
確認メールから、メールアドレス変更URLにアクセスすることで変更完了とする。
まず、必要なパラメータ。
ID アカウントのID
処理の流れ
1.ログインチェック → ログインしていなかったら、セッションクリアしてTOPにリダイレクト
2.パラメータチェック → エラーがあったら、X-StatにERR_PARAMETER(401)を設定してレスポンス。
・ID 数値であること。
・MAIL 正しいメールアドレス形式であること。
3.設定対象のIDが存在すること。 → 存在しない場合は、X-StatにERR_NOTFOUND(402)を設定してレスポンス。
存在するか確認する方法
4.変更するメールアドレスが既に登録されていないか確認。 → 既に登録されている場合は、X-StatにERR_MAIL_ALREADY(304)を設定してレスポンス。
5.メールアドレスを取得。
使用するSQL
select MAIL from tbl_user where ID = ?
$stmt->bind_param("i", $id);
6.トークン作成
メールアドレスとタイムスタンプをくっつけた物をmd5+base64したヤツ。
7.メールアドレス変更テーブルに「ID・変更前アドレス・変更後アドレス・トークン・日時」を登録。IDが存在する場合は、上書き。
使用するSQL
(存在する場合) update tbl_mailtemp set MAILNEW = ?, MAILOLD = ?, TOKEN = ? where ID = ?
$stmt->bind_param("ssi", $mailnew, $mailold, $token, $id);
(存在しない場合)insert into tbl_mailtemp (ID, MAILNEW, MAILOLD, TOKEN) values (?, ?, ?, ?)
$stmt->bind_param("iss", $id, $mailnew, $mailold, $token);
8.変更後メールアドレスに、メールアドレス変更確認メールを送信する。送信に失敗した場合は、X-StatにERR_MAIL(504)を設定してレスポンス。
9.X-StatにSUCCESS(200)を設定してレスポンス。
メールアドレス変更URLにアクセスしてからの処理。
1.パラメータチェック → エラーがあった場合は、エラー画面。
・ID 数値であること。
・TOKEN 設定されていること。
2.メールアドレス変更テーブルに、IDが登録されているか確認。 → 登録されていない場合は、エラー画面。
3.メールアドレス変更テーブルから「変更前アドレス・変更後アドレス・日時」を取得
SQL
select MAILNEW, MAILOLD, UNIX_TIMESTAMP(DATE) from tbl_mailtemp where ID = ? and TOKEN = ?
$stmt->bind_param("is", $id, $token);
4.メールアドレス変更テーブルの、更新対象レコードの更新日時から24時間以上経っていないか確認。
→24時間以上経っている場合は、無効なアクセスとする。メールアドレス変更テーブルからレコードを削除する。