パスワード リセット機能を実装するために安全な MySQL テーブル構造を設計するにはどうすればよいですか?
現代のソフトウェア開発では、ユーザー アカウントのパスワード漏洩のリスクも高まるため、ユーザー アカウントのパスワード リセット機能の重要性がますます高まっています。ユーザーのプライバシーとデータのセキュリティを保護するために、開発者は安全で信頼性の高い MySQL テーブル構造を設計してパスワード リセット機能を実装する必要があります。
以下は、パスワード リセット機能の実装に役立つ実行可能な MySQL テーブル構造設計です:
テーブル名:password_reset
カラムname | Type | Description |
---|---|---|
#id | INT(11) | Primary key、自動インクリメント |
user_id | INT(11) | ユーザー テーブルに関連付けられた外部キー |
token | VARCHAR(255) | ランダムに生成された文字列を使用した、パスワードをリセットするための一意の識別子 |
expiration_time | TIMESTAMP | パスワードリセットリンクの有効期間 |
creation_time | TIMESTAMP | レコード作成時刻 |
パスワード リセット機能を実装する手順は次のとおりです。
CREATE TABLE password_reset ( id INT(11) NOT NULL AUTO_INCREMENT, user_id INT(11) NOT NULL, token VARCHAR(255) NOT NULL, expiration_time TIMESTAMP NOT NULL, creation_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), FOREIGN KEY (user_id) REFERENCES users(id) );
function generateToken() { $length = 32; $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $token = ''; for ($i = 0; $i < $length; $i++) { $token .= $characters[rand(0, strlen($characters) - 1)]; } return $token; } $userId = 123; // 用户的ID $expirationTime = date('Y-m-d H:i:s', strtotime('+1 day')); // 链接的有效期为一天 $token = generateToken(); $query = "INSERT INTO password_reset (user_id, token, expiration_time) VALUES ($userId, '$token', '$expirationTime')"; // 执行SQL插入操作
$token = $_GET['token']; // 从URL参数中获取token $query = "SELECT * FROM password_reset WHERE token = '$token' AND expiration_time >= NOW()"; // 执行SQL查询操作
$newPassword = $_POST['new_password']; // 从表单中获取新密码 $hashedPassword = password_hash($newPassword, PASSWORD_DEFAULT); // 新密码进行哈希处理 $query = "UPDATE users SET password = '$hashedPassword' WHERE id = $userId"; // 执行SQL更新操作
$query = "DELETE FROM password_reset WHERE user_id = $userId"; // 执行SQL删除操作
以上がパスワード リセット機能を実装するために安全な MySQL テーブル構造を設計するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。