2017-01-18 7 views
0

私は、ユーザーが電子メール/パスワードの組み合わせ、またはFacebookやGoogleのサインアップを使って手動でサインアップできるアプリを開発中です。FacebookやGoogleから自分のアプリにサインアップしたかどうかを覚えていないユーザーを扱うにはどうすればいいですか?

iOS上でそれぞれのライブラリを使用しています.FBまたはGoogleからのトークンを私に提供します。アプリはこのトークンをバックエンドに送信します。バックエンド側では、それぞれの第三者を介してトークンを検証し、有効であれば、第三者からユーザーのIDを取得します。このIDを使用して、データベース内のユーザーを識別します。データベースでは、このユーザーの電子メールも保存します。

私の問題は、ユーザーがアプリを削除して再インストールし、facebookやgoogleのログインで登録したかどうかを忘れた場合に発生します。彼らはもともとfacebookを使ってサインアップしていましたが、今再インストールした後、googleのボタンを使ってサインインします。 バックエンドが新しいGoogleトークンを受け取ってそれを検証すると、GoogleからそのユーザーのIDが取得されます。このIDはFacebookにサインアップしたユーザーの元のIDとは異なるため、技術的には全く異なるユーザーです。また、元のユーザーの電子メールはすでにデータベースに保存されているため、同じ電子メールで重複したユーザーを作成することはできません。

この状況を回避するには適切な方法はありますか? 最初にFacebook経由でサインアップしたことを知らせる情報エラーがユーザーに表示され、使用する必要がありますか?

+0

ログイン後のGoogle/FBのようなユーザーデータを取得するこの資格情報を使用したログイン次回の他の方法によるログインでは、電子メールIDがdb内に存在するかどうかを確認します。 google/fbまたはidメソッドによるユーザーログインは同じになります。 –

答えて

0

データベースのユーザーを識別するためにFacebook IDを使用する代わりに、自動インクリメント整数のID列を使用します。この方法で、ユーザーごとに固有のIDを取得できます。このアプローチでは、ユーザーのGoogle IDやFacebookのIDなどの複数のシングルサインオンIDを同じユーザーにマッピングすることができます。次に、独自のIDを使用してアプリ内のユーザーを識別します。

+0

私はアプリケーション内で特に使われているUUIDフィールドである別の列を持っています。同じユーザーをFacebookのログインからGoogleの同じユーザーにマップするにはどうすればよいですか?現在私は、第三者のIDを格納するauth_idという列と、app IDの私であるuseridという別の列を持っています。私は別のものを持っているべきですか? –

+0

facebook_idとgoogle_idのように、facebookとgoogleの両方に同じ列を使用する代わりに、それぞれ別々の列を持つだけです。 – Marcus

+0

また、FacebookやGoogleからユーザーに関するデータを取得するために、アクセストークンなどを入手できますか? facbook_tokenとgoogle_tokenの別々の列にも保存する必要があります。ユーザーが自分のFacebookアカウントとGoogleアカウントの両方をアプリ内の1つのアカウントに接続できるようにすることは、何も止まっていません。正しいアカウントを見つけるために電子メールを照合することができます。 – Marcus

関連する問題