一般的なログイン サイトの仕組み
一般的なログインサイトの仕組みを自作してみました。
開発環境はLaravelを利用しているので、ユーザID(メールアドレス)、パスワードをDBに挿入、認証させるのはフレームワークの機能なので省いて、全体のサービスとしての仕様の概要を話します。
一般的にユーザーID、パスワード認証の仕組みを実装しようとすると以下の機能が必要になります
・ユーザ登録をする
・ログインをする
・メール認証(ユーザ登録で登録されたアドレスが本当に正しいアドレスかの確認)
・パスワード忘れ
・サービスの退会処理
ユーザ登録してログインするだけならすごく簡単なのですが、それに付随する機能を作成するのが面倒です。
自分の場合他のfacebookなどのSNSアカウントでもログインできるようにしているので、他のログインシステムと整合性を取るための仕組みが必要でした。
- シーケンス、フローチャート
1, ユーザID(メールアドレス)、パスワードをサーバに送信
これは簡単にこの2つをサーバ側にPOSTするだけで問題ありません(javascriptなどでチェックはしてください。)
2, DBに仮登録
postされたデータをDBに挿入、メールでのURL認証がまだなので、その辺はフラグ操作で仮登録のフェーズに設定してください。
一般的なSNSではユーザ登録後に認証URLがメールで送信されてきて、それをクリックしたら完了というのが多いです。これは登録したメールアドレスが本当に本人のものかを確認するためのチェックです(当たり前です)
なので登録したメールアドレス+日付などの文字列のMD5でユニークな認証キーを作成して、それを登録ユーザにメール送信します。
http://3ps-net.com/chk?hash=xxxxxxxxxxxxxxxxxxxxx のような感じになります。
もちろんサーバ側はユニークな認証キーとユーザIDを紐づけて保存します。
3, 認証URLの選択
登録者は届いたメールの認証URLを選択します。
嘘のメールアドレスを登録しない限り、登録したメールアドレス(自分)に認証URLは届きますよね。
4, 正式に登録完了
認証キーのURL(GET)にアクセスがあったのでサーバ側は認証キーを検索、ユーザIDを求めて、このユーザIDは正式にユーザ登録が完了したことになります。
以上です。
あまり既存の資料を参考にせず、自分で考えたので間違いがあれば教えて頂ければ嬉しいです。