質問: パソコンやスマホなど複数端末からの同時ログインを不可にしたいのですが、どのように同じユーザーが複数端末でログインしているか、しようとしているかを判定出来ますでしょうか? 今はユーザーログイン時に毎回トークンを発行して、そのトークンでクライアント側からAPIにリクエストを送るようにしています。 ユーザー登録時にユーザー情報とともに、そのユーザー用のトークンをdbに保存し、ユーザーがログインする時は毎回、dbに保存しておいたそのユーザー用のトークンを渡してあげれば良いでしょうか? いや、単純にデータベースなどに各ユーザーが既にログイン状態にあるかどうかを記録しておいて、毎回、ユーザーログインがある度にそこと照らし合わせあげれば良いだけの話ですか?
回答: トークンはユーザ登録ごとではなく、ログインごとに発行したほうがいいと思います。 1. ログイン時にトークンを発行 2. 発行したトークンと、ユーザIDをDBに保存(ユーザ情報のテーブルとは別) 3. トークンはCookieに保存する。 4. リクエストごとにCookieからトークンを取得し、DBを検索 トークンが存在しない場合 ログインしたユーザのIDで検索し、存在しなければトークン発行。 存在すれば、多重ログインエラーを返却 ここで問題になるのが、トークンを格納するDBのデータ削除です。 データが残ってしまうと、別端末でのログインができなくなってしまいます。 ログイン日時などを持たせチェックしてもよいですが、 memcacheやredisなどのキャッシュDBを使うことで、期限(タイムアウト)を設定すれば 自動で削除してくれます。