delight_im:ログイン画面
概要説明
ログイン画面を表示して、認証を行います。
コードの一例
コードの一例を示します。<?php require_once("myAuth.php"); if ($_SERVER['REQUEST_METHOD'] === 'POST') { // ② $email = $_POST['email'] ?? ''; $password = $_POST['password'] ?? ''; try { $auth->login($email, $password); // ③ // ログイン成功したユーザー情報を取得 // ➃ $userId = $auth->getUserId(); $username = $auth->getUsername(); // セッションに保存 // ⑤ $_SESSION['user_id'] = $userId; $_SESSION['username'] = $username; header('Location: ./../main/index.php'); // ⑥ exit; } catch (\Delight\Auth\InvalidEmailException $e) { // ⑦ $error = 'メールアドレスが存在しません。'; } catch (\Delight\Auth\InvalidPasswordException $e) { $error = 'パスワードが正しくありません。'; } catch (\Delight\Auth\TooManyRequestsException $e) { $error = 'ログイン試行が多すぎます。少し時間を置いてください。'; } } ?> <!doctype html> <html> <head><meta charset="utf-8"><title>ログイン</title></head> <body> <h1>ログイン</h1> <?php if (! empty($error)): ?> <!-- ⑧ --> <p style="color:red;"><?php echo htmlspecialchars($error, ENT_QUOTES, 'UTF-8'); ?></p> <?php endif; ?> <form method="post" action=""> <!-- ① --> <label>メールアドレス:<input type="email" name="email" required></label><br> <label>パスワード:<input type="password" name="password" required></label><br> <button type="submit">ログイン</button> </form> </body> </html>以降、各部分毎に分けて説明します。
① ログイン画面
login.php にアクセスすると、最初にこの部分に到達します。 HTML で、「ログイン画面」を表示します。 メールアドレスとパスワードを入力して「ログイン」ボタンを押すと、 method="post" action="" なので、 このファイル(login.php) が POST メソッドで再度呼ばれます。
② ログイン認証
「ログイン」ボタンを押してここに来ると、 'POST'なので、if の中に入ります。
③ ユーザー認証
HTML で入力したメールアドレスとパスワードを引数に、 $auth->login でユーザー認証を実行します。 認証に失敗すると例外を発生します。→ ⑦へ。
➃ ユーザー情報を取得
$auth->getUserId でユーザーID を、 $auth->getUsername でユーザー名を取得します。 他にも、 getEmail()、getStatus() や、 ユーザーの状態を取得する関数が多数あります。
⑤ セッションに保存
WEBアプリで使用するため、ユーザー情報をセッションに保存します。
⑥ ログイン後の画面に
ログイン後、 サンプル・プログラムでは main/index.php 決め打ちで遷移しています。 実際のWEBアプリでは、任意ページのURLを指定される事もあるでしょうから、 ログイン後は、ユーザーが元々アクセスしたかったページに遷移するのが親切でしょう。
⑦ エラーメッセージの設定
$auth->login は認証に失敗すると例外を発生します。 発生した例外の種類に従って $error に文字列を設定します。
⑧ エラーメッセージの表示
認証に失敗すると、再度ログイン画面を表示します。 その際、発生したエラーの内容 ($error) を画面に表示します。