既存のログインシステムでのFacebookログインの使用

カスタムのログインメカニズムとFacebookログインの両方を備えたアプリを作成することもできます。このガイドでは、こういったシナリオの例を説明し、アプリ利用者の操作性を考慮する際のヒントを紹介します。

概要

独自のログインシステムを実装しようとする場合、利用者がメールアドレスとパスワードを使用してアプリに登録するとアカウントが作成されます。この場合、通常は、メールによる確認ステップを使用して個人の認証を行います。

代わりに、ログインシステム全体にFacebookログインを利用することもできます。この場合、Facebookログインを使用してアプリに登録することによって利用者のアカウントが作成され、認証ステップはFacebookで処理されます。

ただし、実際のアプリでは、このようなシナリオよりも複雑な状況の処理が必要になる場合があります。

  • 利用者がメールとパスワードを使用してアプリに登録したが、後になってFacebookアカウントからのデータの取得やタイムラインの投稿にFacebookログインを使用することになったケース。または、単に以後のログインにFacebookログインを使用することになったケース。
  • 利用者がメールとパスワードを使用してアプリに登録したが、後から別途Facebookでログインするケース。このガイドでは、最初に指定したメールと、Facebookアカウントに関連付けられているメインのメールが同じものであることを前提とします。
  • 利用者がFacebookログインを使用してアプリに登録したが、後になってメールアドレスとパスワードを使用してこのアカウントにログインすることになったケース。

このガイドでは、これらの状況の処理に最適と考えられる方法について説明します。

Facebookログインとログイン済みのアカウントとの関連付け

このセクションでは、アプリのカスタムログインシステムを使用してアカウントを作成するケースを説明します。ログインしている状態で、アカウントをFacebookアカウントに関連付けるような場合です。たとえば、メールアドレスとパスワードを使用してSpotifyに登録し、音楽を聴くアクティビティをタイムラインに公開するような場合に、Facebookログインを使用して後からそのアカウントをFacebookアカウントに関連付けることができます。

1. Facebookログインフローをアプリに追加する

このステップを完了させるには、アプリ内のFacebookログインフローの使用に関するガイドをご覧ください。Spotifyの例では、利用者が音楽を聴くアクティビティを公開すると決める時点まではFacebookログインフローを使用します。または、利用者のアカウントをFacebookアカウントにリンクさせるオプションを表示することもできます。

2. アカウント情報の統合処理を行う

カスタムのログインシステムを使用して利用者がアプリにログインし、その後Facebookログインフローを完了させた場合、次の2つの重要な要素をアプリで統合する必要があります。

  • アプリが作成したアカウント
  • 利用者のFacebookアカウントを確認できるFacebookからの情報

ほとんどのアプリでは、元のアカウントはデータベーステーブルに格納されることから、Facebookアカウント情報をデータベース内の該当するアカウントに関連付けるのが最も簡単な方法になります。

通常は、利用者のFacebookアカウント情報を格納するための新しいテーブルを作成することをおすすめします。既存のアカウントテーブルに列を追加するのではなく、別のテーブルを作成しておくと、後でその他のOAuthアカウントログインも簡単にサポートできるため便利です。

その後、同じ利用者がアプリにログインする際にはデータベースに格納されている情報を照合することによって、ログイン方法に関係なく利用者をシームレスにログインさせることができます。

別途作成したアカウントとFacebookログインとの統合

このシナリオでは、利用者は、メールやパスワードなどの自分の認証情報を使用してアプリにログインしています。その後、ログアウトした利用者がFacebookログインを使用してアプリにサインインします。この時点で、アプリには同一の利用者に対して2つのアカウント(アプリのログインシステムで作成したアカウントとFacebookログインフローで作成したアカウント)が存在することになります。利用者にとって快適な操作性を実現するには、これらのアカウントを1つに統合する必要があります。

このガイドでは、アプリで作成したそれぞれのアカウントには、同じメールアドレスが関連付けられていることを前提としています。ただし、利用者がFacebookアカウントに関連付けられているものとは別のメールを使用して、既存のアカウントを作成していることも考えられます。その場合は、「アカウントの統合」オプションをアプリのわかりやすい場所に表示させ、利用者が統合を希望する2つの別のアカウントを手動で選択できるようにする必要があります。
また、カスタムアカウントにメールアドレスが保存されていない場合も、利用者が統合を希望するアカウントを手動で指定できるようにする必要があります。

1. Facebookログインフローを修正してメールのアクセス許可をリクエストする

アプリのカスタムログインシステムでメールアドレスを使用して各アカウントを特定する場合は、Facebookログインフローで、利用者のメールアドレスをリクエストする必要があります(emailアクセス許可を使用)。リクエスト方法の詳細は、アクセス許可のリクエストに関するガイドをご覧ください。

2. Facebookログインアカウントとアプリアカウントを統合する

Facebookを使用したログインが正しく処理されると、利用者のメールアドレス、Facebook ID、アクセストークンを取得できます。アプリ側では、同じメールアドレスを使用して作成されたアカウントが存在していないかどうかを調べる必要があります。アカウントが存在する場合は、2つのアカウントを統合し、既存のアカウントにFacebook情報を追加する必要があります(上述の推奨事項をご覧ください)。

この段階では、利用者が通常の方法でログインできるように処理する必要があります。

該当するメールアドレスを使用した既存のエントリがデータベース内に存在しない場合は、新規利用者として処理します。

Facebookログインで作成したアカウントへの手動ログイン情報の追加

利用者がFacebookログインを使用してアプリでアカウントを作成したが、後になって別の認証情報とパスワードを使用したアカウントへのログインが必要になったというような場合には、この処理が必要になります。たとえば、Netflixには通常のログインシステムの他に、Facebookログインを使用するウェブアプリがあります。また、Xbox 360アプリで使用できるのは、通常のログインシステムのみです。

1. Facebookログイン用メールアドレスが有効であることを確認する

各アカウントを特定するための固有の認証情報としてメールアドレスを使用する場合は、アプリ側でその利用者のFacebookアカウントに関連付けられているメールアドレス(Facebookログイン時に取得したもの)が有効であることを確認する必要があります。そのためには、Facebookログイン時に取得したアドレス宛に確認メールを送信するコードをアプリ内に作成します(通常のログインシステムでもこのコードの作成が必要になる場合があります)。

2. 新しいパスワード(およびその他の認証情報)を設定するように依頼する

メールアドレスの確認が完了したら、パスワードの入力を利用者にリクエストできます。その際には、アプリへの以後のログインには指定したパスワードとメールアドレスを使用できることを利用者に伝えます。パスワードが指定されたら、現在アカウント情報が格納されているデータベース内の同じ場所にそのパスワードを追加します。

アプリのログインシステムでIDにメールアドレスを使用せず、ユーザーネームなど利用者が作成した認証情報を使用する場合は、パスワードと同じタイミングでその認証情報を指定するように利用者にリクエストします。

利用者には、ログインアカウントとFacebookアカウントの関連付けを削除する機能も提供する必要があります。その場合は、アカウントデータベーステーブルから該当する利用者のFacebook情報を削除します。