PHP でログイン認証 API 制作

ログイン認証 API を制作します。
* PHP開発環境がない場合は「LAMP環境構築(CentOS8 Minimal, Apache2.4, MySQL8.0, PHP7.4)」で開発環境を作成してください
ドキュメントルートと共通化した Windows のディレクトリ(C:\www\php.sunabird.local\)に下記ファイルを作成します。

・login.php(ログイン画面)
・login_api.php(認証 API ファイル)
・login_ok.php(認証 OK 画面)


練習1: DB(MySQL)とテーブル作成

登録ユーザーのパスワードハッシュを生成します(パスワードを「test」とします)
# php -r "echo password_hash('test', PASSWORD_DEFAULT);"
$2y$10$D/rsja/hzxEOhSr4SDBNbu1KsKH8eshlj/KBWEJdRxeePFRS8RyTG
データ流出した際に元のパスワードが判らないよう DB にパスワードを登録する場合、ハッシュ値を登録します
サーバーにユーザー認証用の DB とテーブルを作成します

MySQLにログイン
# mysql -u root -p
DB authdb を作成
mysql> CREATE DATABASE authdb;
DB authdb に移動
mysql> use authdb;

t_users テーブルを作成
mysql> CREATE TABLE t_users(id SERIAL PRIMARY KEY, mail TEXT NOT NULL, pass VARCHAR(255) NOT NULL);
サンプルデータを登録。パスワードは生成したハッシュ値を登録します
mysql> INSERT INTO t_users (mail, pass) VALUES ('hoge@sunabird.local', '$2y$10$D/rsja/hzxEOhSr4SDBNbu1KsKH8eshlj/KBWEJdRxeePFRS8RyTG');
サンプルデータを確認
mysql> SELECT * FROM t_users;
+----+---------------------+--------------------------------------------------------------+
| id | mail                | pass
+----+---------------------+--------------------------------------------------------------+
| 1  | hoge@sunabird.local | $2y$10$D/rsja/hzxEOhSr4SDBNbu1KsKH8eshlj/KBWEJdRxeePFRS8RyTG
+----+---------------------+--------------------------------------------------------------+

練習2:ログイン認証 API 作成

ログイン用の Controller クラスファイル作成
ファイル:login.php
Javascript ライブラリ「Jquery」の ajax を利用
ファイル:login_api.php
password_hash でハッシュ化したパスワードを検証する場合 password_verify を使用
ファイル:login_ok.php


ブラウザからアクセスします
https://php.sunabird.local/login.php


登録されていないユーザーで「ログイン」した場合、エラーメッセージ表示



登録されているユーザーで「ログイン」した場合、認証 OK 画面へ遷移


課題

課題1:ログインしていない場合、直接「認証 OK 画面(https://php.sunabird.local/login_ok.php)」にアクセスした場合、ログイン画面へリダイレクト