58
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ソーシャルログイン時のユーザーテーブルとログイン管理

Last updated at Posted at 2017-11-15

概要

OAuthでログインする方法は検索すれば出てきますが、そのあとのログイン管理をどうしたら良いのだろうかと考えてみました。

ログインとログイン後の流れ

  1. ログイン時にユーザー情報を得る。
    OAuthは以下を参考に行えばユーザー情報を得ることは可能という前提とします。
    http://oauth2-client.thephpleague.com/providers/league/

  2. ユーザー情報を元にアプリケーション側に通常ユーザーを作る。(アプリケーション側に該当ユーザーが存在しなければ)

  3. ユーザーが既に存在している場合はgoogle_idやfacebook_idが未登録であれば登録する。(これで通常ログインもソーシャルログインも対応できる)

  4. アプリケーション側の通常ユーザーと同様にアプリケーション側のユーザーIDで振る舞いを行う。アプリ内ではアプリのユーザーIDで管理する。

ユーザーテーブル設計例

id display_id google_id facebook_id mailadress name password その他アプリに必要だと思われる情報
password_update_datetime
(パスワード有効期限判定)、
lastlogin_datetime
(アクティブユーザー)
create_datetime update_datetime delete_datetime delete_flag
INT VARCHAR(255) VARCHAR(255) VARCHAR(255) VARCHAR(255) VARCHAR(255) VARCHAR(255) DATETIME DATETIME DATETIME TINYINT(1)
初期値 NULL NULL CURRENT_TIMESTAMP CURRENT_TIMESTAMP NULL 0
その他 AUTO_INCREMENT
UNSIGNED
NOT NULL
NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL

idでPRIMARY KEY
display_idでUNIQUE 表示用ID uniqid()等で作る
facebook_idでUNIQUE
google_idでUNIQUE
password パスワードハッシュ null許可 password_hash()で作成
mailadressでUNIQUE(mailadressをキーにする)
初回ログイン時には名前は登録させる。

  • 名前は取得してきた情報により本名になってしまうかもしれないので改めて登録させる
  • ソーシャルログインの場合はパスワードは不要(取得したgoogle_idやfacebook_idが既に登録されているかでログイン処理を行う。idで登録されていなければemailメールアドレスで判定し登録済みならgoogle_idやfacebook_idを登録する)

保存する(保存しても良い)情報等の扱いは利用するサービスの規約に従ってください

海外のサービスには個人情報についての取り扱い等の記述は見当たりませんでしたが、
Oauthでの認可は個人情報を渡すことの許可にあたるそうなので許可が出れば保存しても問題なさそうです。

アクセストークンの保持について

アクセストークンをDB等に保存して期限切れまで再利用する際は可逆暗号化すべきとのことです。また、保存するかしないかはアプリ側に委ねられているそうです。
危ういものは持ちたくないということで私は毎回トークンを取得しに行く方法でも良いかと感じました。

参考

アクセストークン

  • Facebook

https://developers.facebook.com/docs/facebook-login/access-tokens#errors
有効期限切れのトークンを処理する最善の方法は、APIによるエラーメッセージを取り込むことです。エラーが発生するごとに、APIはHTTP 400ステータスコード、コード、サブコードを、エラーの特徴を説明するJSON本体に含めて返します
https://developers.facebook.com/docs/facebook-login/access-tokens/debugging-and-error-handling#errors

  • Google

無効なアクセストークンの際は401
https://cloud.google.com/docs/authentication#error_handling

58
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
58
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?