TwitterやGoogleのOAuth認証を使ったログインシステムを既存のシステムに組み込もうとしているのですが、既存のUserテーブルとのデータの整合性をどのようにとればいいかがわかりません。
既存のUserテーブルのスキーマは以下の様になります。
{ id: str // primary key 自動採番 email: str // unique not null name: str // unique not null }
このUserテーブルに紐付いた形で、様々なエンティティが存在しています。
ですので、OAuth認証でログインした場合、OAuth先のリソースサーバーから何かしらのデータを取得し、Userテーブルを作成するor作成済みのUserテーブルを使ってログインさせたいと考えています。
その場合は、一般的にどのように修正すれば良いのでしょうか?
案1. フラグを追加する
- 不要なフィールドをnullableにし、
- 必要なデータはリソースサーバーから取得したデータを加工して保存する
- ログイン時(例えばtwitterのOAuth)はそのIDとフラグをチェックする。
- IDとフラグが合ったらログインし、なかったら新規にUserを作成する
{ id: str // primary key 自動採番 email: str // unique <- nullableに変更する name: str // unique <- リソースサーバーから取得したscreen_name+乱数で自動作成する tw_id: str // <- リソースサーバーから取得したtwitterのIDを入れる, uniqueにする tw_activated: bool // <- OAuthで作成されたかのフラグ }
また、取得したアクセストークンやリフレッシュトークンなどはUserなどのDBに保存するべきなのでしょうか?
ログインするにはOAuth連携先のUserのデータ(例えばtwitterのアカウントのid)などが必要になると思いますので、例えアクセストークンを保存していてもそのアクセストークンのフィールドを引き出すキー(twitterのid)が分からない以上、保存する意味がないような気がするのですが(なぜなら、アクセストークンを取得する前までにtwitterのidがわからないため)
以上になります。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。