Webシステム開発入門 - Perl&Mojolicious

未認証ユーザーテーブルの作成

未認証ユーザーテーブルを作成しましょう。会員登録フォームの作成が終わったら、次は、データベースに未認証用ユーザーテーブルを作成します。

未認証ユーザーテーブル

未認証ユーザーテーブルとは、ユーザー認証が行われていない仮登録のユーザーを、登録しておくために使用するテーブルのことです。

会員登録のフォームが送信されるとメールアドレスとパスワードの情報が登録されますが、まだメールアドレスによるユーザー認証が終わっていません。この状態のユーザーを登録しておくのが、未認証ユーザーテーブルです。

テーブル名は「user_unauth」と名付けました。

フィールドテーブルのフィールド名制約デフォルト値
IDid32bit整数プライマリーキー、自動インクリメントなし
メールアドレスmail文字列非ヌル空文字
ハッシュ化されたパスワードpassword_crypted文字列非ヌル空文字
トークンtoken文字列非ヌル、ユニーク空文字
トークン有効期限token_expiration64bit整数非ヌル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」です。