未認証ユーザーテーブルの作成
未認証ユーザーテーブルを作成しましょう。会員登録フォームの作成が終わったら、次は、データベースに未認証用ユーザーテーブルを作成します。
未認証ユーザーテーブル
未認証ユーザーテーブルとは、ユーザー認証が行われていない仮登録のユーザーを、登録しておくために使用するテーブルのことです。
会員登録のフォームが送信されるとメールアドレスとパスワードの情報が登録されますが、まだメールアドレスによるユーザー認証が終わっていません。この状態のユーザーを登録しておくのが、未認証ユーザーテーブルです。
テーブル名は「user_unauth」と名付けました。
フィールド | テーブルのフィールド名 | 型 | 制約 | デフォルト値 |
---|---|---|---|---|
ID | id | 32bit整数 | プライマリーキー、自動インクリメント | なし |
メールアドレス | 文字列 | 非ヌル | 空文字 | |
ハッシュ化されたパスワード | password_crypted | 文字列 | 非ヌル | 空文字 |
トークン | token | 文字列 | 非ヌル、ユニーク | 空文字 |
トークン有効期限 | token_expiration | 64bit整数 | 非ヌル | 0 |
作成日 | token_expiration | 日付時刻 | 非ヌル | 0001-01-01 00:00:00 |
更新日 | token_expiration | 日付時刻 | 非ヌル | 0001-01-01 00:00:00 |
もし氏名、住所、電話番号、希望条件など、会員登録フォームに、他の入力項目がある場合などは、そのフィールドも必要になります。
MariaDBで未認証ユーザーテーブルを作成
MariaDBで未認証ユーザーテーブルを作成してみましょう。
create table user_unauth ( id int primary key auto_increment, mail varchar(150) not null default '', password_crypted varchar(150) not null default '', token varchar(150) not null default '', token_expiration bigint not null default 0, created_at datetime not null default '0001-01-01 00:00:00', updated_at datetime not null default '0001-01-01 00:00:00', unique(mail), unique(token) ) ENGINE=InnoDB CHARSET=utf8mb4;
utf8mb4がサポートされていることを前提としています。サポートされていない場合は、utf8にしてください。データべースエンジンは、トランザクションをサポートするために、InnoDBにします。
できる限りのフィールドにnot null制約を付けます。デフォルト値は、プライマリーキー以外のフィールドですべて設定します。
フィールドの解説
フィールドの解説です。
ID
Webシステム開発入門では、IDは、行を一意に識別できるキーを意味します。それ自体に意味を持たない整数値です。必ずすべてのテーブルに、自動的に値がインクリメントされる、IDを持たせます。他のテーブルから参照される場合は、IDを使います。
primary keyとauto_incrementを設定します。プライマリーキー制約は、フィールドに一意性と非ヌルを保証する、テーブルで一つのフィールドにだけ設定できる特別な制約です。
型は32bit整数型のintです。
ハッシュ化されたパスワード
ハッシュ化されたパスワードを保存するフィールドです。フォームで受け取ったパスワードをそのまま保存するのではないということだけ、ここでは、覚えておいてください。ハッシュ化されたパスワードについては、ユーザー認証のの処理を説明する場所で解説します。
メールアドレス
ユーザーのメールアドレスです。メールアドレスは、一意である必要があるので、unique制約を設定します。
トークン
メールを送信してユーザー認証を行うために発行されるユニークなトークンです。「356a192b7913b04c54574d18c28d46e6395428ab」のような、ランダムな値です。トークンは、一意である必要があるので、unique制約を設定します。
トークン有効期限
トークンの有効期限です。この有効期限がきれると、トークンは無効になり、ユーザー認証ができなくなります。
型は、時刻情報を十分長く先まで保持できるように、64bit整数型のbigintにしています。
作成日時
作成日時はdatetime型です。デフォルト値は、SQL標準においても有効な日時の最小値である「0001-01-01 00:00:00」です。
更新日時
更新日時はdatetime型です。デフォルト値は、SQL標準においても有効な日時の最小値である「0001-01-01 00:00:00」です。