WordPressサイトでユーザーが自分のAPIキーを再発行できる機能を追加する方法について解説します。この機能を実装することで、ユーザーは必要に応じて自分のAPIキーを再発行し、安全に管理できるようになります。
APIキー再発行機能の概要
この機能では、ユーザーがログインした状態で「APIキーを再発行」ボタンをクリックすると、新しいAPIキーが発行され、既存のAPIキーが更新される仕組みです。再発行後、新しいAPIキーはユーザーに表示され、古いAPIキーは無効になります。
必要なコードの実装
まずは、ユーザーログイン&APIキー確認
テンプレートを基にAPIキー再発行機能を追加します。
更後のコード(APIキー再発行機能追加)
<?php
/**
* Template Name: ユーザーログイン&APIキー確認
*/
get_header();
?>
<div class="login-container">
<?php
if (is_user_logged_in()) {
// ユーザーがログイン済みの場合
$user = wp_get_current_user();
$api_key = get_user_meta($user->ID, 'api_key', true);
// APIキー再発行処理
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'regenerate_api_key') {
$new_api_key = bin2hex(random_bytes(16)); // 新しいAPIキーを生成
update_user_meta($user->ID, 'api_key', $new_api_key); // ユーザーのAPIキーを更新
$api_key = $new_api_key; // 新しいAPIキーを表示するために変数を更新
echo '<p style="color:green;">新しいAPIキーが発行されました。</p>';
}
?>
<h2>ようこそ, <?php echo esc_html($user->display_name); ?> さん</h2>
<p>あなたのAPIキー:</p>
<input type="text" value="<?php echo esc_attr($api_key); ?>" readonly>
<!-- APIキー再発行フォーム -->
<form method="post">
<input type="hidden" name="action" value="regenerate_api_key">
<button type="submit" class='btn'>APIキーを再発行</button>
</form>
<!-- ログアウトフォーム -->
<form method="post">
<input type="hidden" name="action" value="logout">
<button type="submit" class='btn'>ログアウト</button>
</form>
<?php
} else {
// ユーザーがログインしていない場合
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'login') {
$username = sanitize_user($_POST['username']);
$password = $_POST['password'];
$remember = isset($_POST['remember']);
$user = wp_signon(array(
'user_login' => $username,
'user_password' => $password,
'remember' => $remember,
), false);
if (is_wp_error($user)) {
echo '<p style="color:red;">ログインに失敗しました。ユーザー名またはパスワードが間違っています。</p>';
} else {
// リダイレクト
wp_redirect(get_permalink());
exit;
}
}
?>
<h2>ログイン</h2>
<form method="post">
<p>
<label for="username">ユーザー名</label><br>
<input type="text" name="username" id="username" required>
</p>
<p>
<label for="password">パスワード</label><br>
<input type="password" name="password" id="password" required>
</p>
<p>
<input type="checkbox" name="remember" id="remember">
<label for="remember">ログイン情報を記憶する</label>
</p>
<input type="hidden" name="action" value="login">
<p>
<input type="submit" value="ログイン">
</p>
</form>
<?php } ?>
</div>
<?php get_footer(); ?>
主な変更点
.1. APIキー再発行フォームの追加
ログイン後、ユーザーは自分のAPIキーを再発行できるボタンをクリックできるようになります。このボタンが押されると、新しいAPIキーが発行され、表示されます。
<form method="post">
<input type="hidden" name="action" value="regenerate_api_key">
<button type="submit" class='btn'>APIキーを再発行</button>
</form>
.2. APIキー再発行処理
ボタンが押されると、$_POST
のaction
がregenerate_api_key
として送信され、サーバー側で新しいAPIキーが生成されます。このAPIキーはupdate_user_meta()
関数を使ってユーザーのメタ情報として保存されます。
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'regenerate_api_key') {
$new_api_key = bin2hex(random_bytes(16)); // 新しいAPIキーを生成
update_user_meta($user->ID, 'api_key', $new_api_key); // ユーザーのAPIキーを更新
$api_key = $new_api_key; // 新しいAPIキーを表示するために変数を更新
echo '<p style="color:green;">新しいAPIキーが発行されました。</p>';
}
.3. 新しいAPIキーの表示
APIキーが再発行された後、ユーザーにはその新しいAPIキーが表示されます。これにより、ユーザーはいつでも自分のAPIキーを確認できます。
<input type="text" value="<?php echo esc_attr($api_key); ?>" readonly>