1

Stormpath を使用すると、次のようにして、アプリケーションに電子メールが存在するかどうかを確認できます。

application.getAccounts(Accounts.where(Accounts.email().eqIgnoreCase(email)));

ただし、Stormpath Social サインインはディレクトリ ベースであり、他のディレクトリでの重複をチェックしないことに気付きました。

たとえば、電子メール アドレス tunji@gmail.com を使用して facebook にサインアップしたユーザーがいて、同じユーザーが gmail のままで再度サインアップしようとした場合tunji@gmail.com、現在、stormpath は両方のユーザーを 2 つの異なるディレクトリ (例: facebook ディレクトリと google) に保存します。ディレクトリ)。これは私が望むものではありません。

tunji@gmail.comどのディレクトリにも存在する場合、他のディレクトリに登録されないようにしたいと考えています。関連付けられたアカウントは、単純に取得する必要があり、同じユーザーを表す必要があります。

問題は、Stormpath が次の方法でソーシャル サインアップ アカウントを取得することです。

ProviderAccountRequest request = Providers.GOOGLE.account().setAccessToken(token).build();
ProviderAccountResult result = application.getAccount(request);

これが何をするかというと、関連付けられたアカウント オブジェクトに対して指定されたディレクトリ(google)のみをチェックし (アプリケーション全体をチェックするわけではありません)、そのディレクトリ内に何も存在しない場合は、自動的に作成して新しいアカウント オブジェクトを返します。したがって、チェックを行い、アカウントを作成するかどうかを決定する機会を与えない。

ストームパスでこのフローを実現する別の方法はありますか??

4

1 に答える 1

4

開発者が Stormpath を使用する方法はいくつかありますが、それは完全にアプリケーションに基づいています。

  1. 彼らは、アプリケーションが Google / Facebook / ユーザー名パスワード認証を異なる方法で処理することを望んでいます。社会的手段を通じてログインするユーザーは、別の方法で扱われます。
  2. 彼らは、アプリケーションが Google / Facebook / ユーザー名パスワード認証を同じように処理することを望んでいます。どのような方法でログインしても同一ユーザーとして扱われます。

追加設定なしで、Stormpath は #1 をサポートしますが、#2 に関する要件を持つお客様が混在しており、カスタム データと呼ばれる Stormpath の機能を活用することでこれを実現しています。開発者は、カスタム データを使用して、Google または Facebook ディレクトリと別のディレクトリ内の実際の「マスター」アカウントとの間に一方向または双方向のリンクを作成できます。

仕組み:

  • ユーザーがユーザー名とパスワードを使用してアプリケーションにサインアップすると、クラウド ディレクトリにアカウントが作成されます。
  • 後で、ユーザーは Google/Facebook を使用してログインすることを決定します。
  • Facebook または Google へのログインに成功すると、開発者は Facebook または Google アカウント (Facebook または Google によって検証される) から電子メール アドレスを取得し、クラウド ディレクトリ内の電子メールでアカウントを検索します。
  • アカウントが Cloud ディレクトリにある場合、アカウントの href は Facebook / Google アカウントのカスタム データに保存されます。
  • 追加のログインで、Facebook または Google アカウントでカスタム データを確認し、href をたどってクラウド ディレクトリ内の実際のアカウントを確認できます。

これが理にかなっていることを願っています。

于 2015-12-15T14:03:36.080 に答える