sled.comでこれを実行しました。ここでは、アカウントの作成とログイン用の複数のサードパーティアカウントのサポートに関して複数の問題があります。それらのいくつかは:
- ローカルパスワードとサードパーティログインの両方をサポートする必要がありますか?
sled.comの場合、ローカルパスワードは値が小さいため、パスワードエントリフォームを保護するための追加コストがかかるため、削除することにしました。パスワードを解読するための多くの既知の攻撃があり、パスワードを導入する場合は、解読が容易でないことを確認する必要があります。また、リークを防ぐために、それらを一方向ハッシュなどに格納する必要があります。
- 複数のサードパーティのアカウントをサポートする際にどの程度の柔軟性を許可したいですか?
Facebook、Twitter、LinkedInの3つのログインプロバイダーをすでに選択しているようです。これは、OAuthを使用し、明確に定義された信頼できるプロバイダーのセットを使用していることを意味するので、すばらしいことです。私はOpenIDのファンではありません。残りの問題は、同じプロバイダーの複数のサードパーティアカウントをサポートする必要があるかどうかです(たとえば、2つのTwitterアカウントがリンクされた1つのローカルアカウント)。私はそうではないと想定していますが、そうする場合は、それをデータモデルに組み込む必要があります。
Sledについては、Facebook、Twitter、Yahoo!でのログインをサポートしています。各ユーザーアカウント内に、それぞれのキーを保存します:{"_id": "djdjd99dj"、 "yahoo": "dj39djdj"、twitter: "3723828732"、 "facebook": "12837287"}。一連の制約を設定して、各サードパーティのアカウントが単一のローカルアカウントにのみリンクできるようにします。
同じサードパーティプロバイダーの複数のアカウントを許可する場合は、リストまたは他の構造を使用してそれをサポートする必要があります。これにより、他のすべての制限が一意性を確保します。
ユーザーが初めてサービスにサインアップするとき、ユーザーは最初にサードパーティプロバイダーにアクセスし、検証済みのサードパーティIDを返します。次に、それらのローカルアカウントを作成し、必要な他の情報を収集します。メールアドレスを収集し、ローカルのユーザー名を選択するよう依頼します(他のプロバイダーからの既存のユーザー名をフォームに事前に入力しようとします)。何らかの形でローカル識別子(電子メール、ユーザー名)を持っていることは、後でアカウントを回復するために非常に重要です。
サーバーは、ブラウザーに既存のアカウントのセッションCookie(有効または期限切れ)がない場合、これが初めてのログインであること、および使用されているサードパーティのアカウントが見つからないことを認識しています。ログインしているだけでなく、新しいアカウントを作成していることをユーザーに通知します。これにより、すでにアカウントを持っている場合は、代わりに一時停止して既存のアカウントでログインできます。
まったく同じフローを使用して追加のアカウントをリンクしますが、ユーザーがサードパーティから戻ってきたとき、有効なセッションCookieの存在を使用して、新しいアカウントをログインアクションにリンクする試みを区別します。許可されるのは、各タイプのサードパーティアカウント1つだけです。すでにリンクされているアカウントがある場合は、アクションをブロックします。新しいアカウントをリンクするためのインターフェースがすでにある場合は(プロバイダーごとに)、万が一のために無効になっているため、問題にはなりません。
ユーザーが既にローカルアカウントにリンクされている新しいサードパーティのアカウントをリンクしようとした場合は、2つのアカウントをマージすることを確認するようにユーザーに促すだけです(データセットとのそのようなマージを処理できると仮定します-多くの場合、より簡単です)行われるより)。マージをリクエストするための特別なボタンを提供することもできますが、実際には、彼らがしていることはすべて別のアカウントをリンクすることです。
これはかなり単純な状態機械です。ユーザーはサードパーティのアカウントIDを使用してサードパーティから戻ってきます。データベースは、次の3つの状態のいずれかになります。
- アカウントはローカルアカウントにリンクされており、セッションCookieが存在しない->ログイン
- アカウントはローカルアカウントにリンクされ、セッションCookieが存在する->マージ
- アカウントがローカルアカウントにリンクされておらず、セッションCookieが存在しない->サインアップ
アカウントはローカルアカウントにリンクされておらず、セッションCookieが存在します->追加のアカウントをリンクしています
- サードパーティのプロバイダーでアカウントを回復するにはどうすればよいですか?
これはまだ実験的な領域です。ほとんどのサービスはサードパーティのアカウントの隣にローカルパスワードを提供しているため、「パスワードを忘れた」というユースケースに焦点を当てているため、完全なUXを見たことはありません。
スレッドでは、「サインインが必要ですか?」を使用することを選択しました。クリックしたときに、ユーザーにメールまたはユーザー名を尋ねます。調べて、一致するアカウントが見つかった場合は、そのユーザーにサービスに自動的にログインできるリンクをメールで送信します(1回限り有効)。いったん入力すると、アカウントリンクページに直接アクセスし、確認して追加のアカウントをリンクする可能性があることを伝え、すでにリンクしているサードパーティのアカウントを表示します。