PHPでログイン登録システムを書く際にメール認証機能を追加するにはどうすればよいですか?

WBOY
リリース: 2023-08-18 10:24:01
オリジナル
1247 人が閲覧しました

PHPでログイン登録システムを書く際にメール認証機能を追加するにはどうすればよいですか?

PHPでログイン登録システムを書くときにメール認証機能を追加するにはどうすればよいですか?

インターネットの発展に伴い、ログインおよび登録機能はあらゆる Web サイトやアプリケーションにとって不可欠な機能になりました。ユーザー情報のセキュリティと有効性を確保するために、電子メール検証機能を追加すると、ユーザーエクスペリエンスとシステムセキュリティを効果的に向上させることができます。この記事では、PHPを使用してログイン登録システムを作成し、メール認証機能を追加する方法を紹介します。

  1. データベースと関連テーブルの作成

まず、データベースと 2 つの関連テーブル (1 つはユーザー情報の保存用、もう 1 つはユーザー情報の保存用) を作成する必要があります。電子メール検証に基づく検証コードと検証ステータス。

CREATE DATABASE user_system;

USE user_system;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(255) NOT NULL,
    is_verified BOOLEAN DEFAULT 0
);

CREATE TABLE email_verification (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    code VARCHAR(255) NOT NULL,
    is_valid BOOLEAN DEFAULT 1
);
ログイン後にコピー
  1. 登録ページの作成

登録ページでは、ユーザーが提供したユーザー名、メールアドレス、パスワードを収集し、確認メールをユーザーが提供した電子メール アドレス。

<?php
session_start();

if (isset($_POST['register'])) {
    $username = $_POST['username'];
    $email = $_POST['email'];
    $password = $_POST['password'];

    // 生成随机的验证码
    $code = bin2hex(random_bytes(16));

    // 将用户信息插入到数据库中
    $query = "INSERT INTO users (username, email, password) VALUES ('$username', '$email', '$password')";
    $result = mysqli_query($connection, $query);

    if ($result) {
        // 将验证码和用户ID插入到邮箱验证表中
        $user_id = mysqli_insert_id($connection);
        $query = "INSERT INTO email_verification (user_id, code) VALUES ('$user_id', '$code')";
        $result = mysqli_query($connection, $query);

        if ($result) {
            // 发送验证邮件
            $to = $email;
            $subject = '用户注册验证';
            $message = "请点击以下链接完成注册验证:
";
            $message .= "http://example.com/activate.php?code=$code";
            $headers = "From: noreply@example.com";

            mail($to, $subject, $message, $headers);

            $_SESSION['success'] = '注册成功,请检查你的邮箱进行验证。';
            header('Location: login.php');
            exit;
        } else {
            $_SESSION['error'] = '注册失败,请稍后重试。';
        }
    } else {
        $_SESSION['error'] = '注册失败,请稍后重试。';
    }
}
?>

<!DOCTYPE html>
<html>

<head>
    <title>用户注册</title>
</head>

<body>
    <h2>用户注册</h2>

    <?php if (isset($_SESSION['error'])): ?>
        <div class="error"><?php echo $_SESSION['error']; ?></div>
    <?php unset($_SESSION['error']); endif; ?>

    <form method="POST">
        <input type="text" name="username" placeholder="用户名" required><br>
        <input type="email" name="email" placeholder="邮箱" required><br>
        <input type="password" name="password" placeholder="密码" required><br>
        <input type="submit" name="register" value="注册">
    </form>
</body>

</html>
ログイン後にコピー
  1. 電子メール検証ページの書き込み

ユーザーが検証電子メール内のリンクをクリックした後、電子メール検証コードの有効性を確認し、ユーザーの認証コードを更新する必要があります。検証ステータス。

<?php
session_start();

if (isset($_GET['code'])) {
    $code = $_GET['code'];

    // 查询验证表中是否存在该验证码
    $query = "SELECT * FROM email_verification WHERE code='$code' AND is_valid=1";
    $result = mysqli_query($connection, $query);

    if (mysqli_num_rows($result) > 0) {
        $verification = mysqli_fetch_assoc($result);
        $user_id = $verification['user_id'];

        // 更新用户的验证状态
        $query = "UPDATE users SET is_verified=1 WHERE id=$user_id";
        $result = mysqli_query($connection, $query);

        if ($result) {
            // 更新验证码的有效性
            $query = "UPDATE email_verification SET is_valid=0 WHERE code='$code'";
            $result = mysqli_query($connection, $query);

            $_SESSION['success'] = '邮箱验证成功,你现在可以登录了。';
            header('Location: login.php');
            exit;
        } else {
            $_SESSION['error'] = '邮箱验证失败,请稍后重试。';
        }
    } else {
        $_SESSION['error'] = '无效的验证码。';
    }
}
?>

<!DOCTYPE html>
<html>

<head>
    <title>邮箱验证</title>
</head>

<body>
    <h2>邮箱验证</h2>

    <?php if (isset($_SESSION['error'])): ?>
        <div class="error"><?php echo $_SESSION['error']; ?></div>
    <?php unset($_SESSION['error']); endif; ?>

    <?php if (isset($_SESSION['success'])): ?>
        <div class="success"><?php echo $_SESSION['success']; ?></div>
    <?php unset($_SESSION['success']); endif; ?>
</body>

</html>
ログイン後にコピー

以上の手順により、基本的なログイン登録システムの作成とメール認証機能の追加に成功しました。ユーザーが登録すると、システムはユーザーが指定した電子メール アドレスに検証電子メールを自動的に送信します。ユーザーはリンクをクリックして電子メール検証を完了する必要があります。検証が成功した場合にのみ、システムにログインできます。これにより、当社の Web サイトまたはアプリケーションへのより安全なユーザー登録とログイン エクスペリエンスが提供されます。

ただし、Web サイトまたはアプリケーションの電子メール送信機能が正しく構成されていることを確認し、関連する構成情報をコード サンプルの対応する部分に置き換えてください。

上記の内容がお役に立てば幸いです。

以上がPHPでログイン登録システムを書く際にメール認証機能を追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート