【Wakarana】既存ユーザーのパスワード変更
Wakaranaで、ログイン済みのユーザーに対して再度パスワードの照合を行い、正しければパスワードの変更を受け付けるサンプルコードです。Wakaranaではパスワードを非可逆暗号化してデータベースに保存しているため、データベースからパスワードを取得することはできませんが、wakarana_user::check_passwordにより同一であるかを比較することが可能です。
なお、パスワードの再入力を求めることによってCSRFに対して一定の抑止効果があることから、このコードではワンタイムトークンの生成と照合を省略しています。
sample_1.php
<?php
include "wakarana/main.php";
$wakarana = new wakarana();
$user = $wakarana->check();
if (!is_object($user)) {
// ログインしていないユーザーにはパスワードの変更フォームを表示しない
exit();
}
print '<form action="sample_2.php" method="post">';
print ' 現在のパスワード <input type="text" name="old_password"><br>';
print ' 新しいパスワード<input type="text" name="new_password"><br>';
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)) {
exit();
}
// パスワード照合処理
if (isset($_POST["old_password"], $_POST["new_password"]) && $user->check_password($_POST["old_password"])) {
$user->set_password($_POST["new_password"]);
print "パスワードを変更しました。";
} else {
print "元のパスワードが一致しませんでした。";
}