Есть ли способ проверить, существует ли учетная запись Stormpath с определенным адресом электронной почты в социальной сети?
Используя Stormpath, приложение можно проверить на наличие электронной почты, выполнив следующие действия;
application.getAccounts(Accounts.where(Accounts.email().eqIgnoreCase(email)));
Однако я заметил, что вход в Stormpath Social основан на каталогах и не проверяет наличие дубликатов в других каталогах.
Например, если есть пользователь, который регистрируется на Facebook с адресом электронной почты tunji@gmail.com
а затем тот же пользователь пытается зарегистрироваться еще раз с его Gmail все еще tunji@gmail.com
В настоящий момент Stormpath сохраняет обоих пользователей в двух моих разных каталогах (например, в каталоге Facebook и каталоге Google). Это не то, что я хочу.
Я хочу быть в состоянии гарантировать, что если tunji@gmail.com
существует в любом каталоге, он никогда не должен быть зарегистрирован ни в каком другом каталоге. Связанный Аккаунт должен просто быть выбран и представлять того же Пользователя.
Проблема в том, что Stormpath получает зарегистрированную учетную запись в социальной сети следующим образом;
ProviderAccountRequest request = Providers.GOOGLE.account().setAccessToken(token).build();
ProviderAccountResult result = application.getAccount(request);
Что он делает, так это то, что он проверяет только указанный каталог (google) на предмет связанного объекта учетной записи (он не проверяет все приложение), и если в этом каталоге его нет, он автоматически создает его и возвращает новый объект учетной записи, следовательно не дает возможности выполнить проверку и решить, следует ли создавать учетную запись или нет.
Есть ли альтернативный способ добиться этого потока в Stormpath??
1 ответ
Разработчики используют Stormpath несколькими способами, и они полностью основаны на их приложениях:
- Они хотят, чтобы приложение по-разному относилось к аутентификации по паролю Google / Facebook / имени пользователя. Пользователь, который входит в систему с помощью социальных средств, рассматривается по-разному.
- Они хотят, чтобы приложение одинаково относилось к аутентификации по паролю Google / Facebook / имени пользователя. Пользователь, который входит в систему любым способом, будет рассматриваться как тот же пользователь.
Изначально Stormpath поддерживает #1, но у нас есть ряд клиентов, которые предъявляют требования около #2, и они достигают этого, используя функцию в Stormpath, называемую пользовательскими данными. Используя пользовательские данные, разработчик может создать однонаправленную или двунаправленную ссылку между каталогом Google или Facebook и реальной "основной" учетной записью в другом каталоге.
Как это работает:
- Пользователь регистрируется в вашем приложении, используя имя пользователя / пароль, и в облачном каталоге создается учетная запись.
- Позднее пользователь решает войти в систему с помощью Google / Facebook
- При успешном входе в Facebook или Google разработчик получает адрес электронной почты из учетной записи Facebook или Google (который проверяется Facebook или Google) и выполняет поиск учетной записи по электронной почте в облачном каталоге.
- Если учетная запись найдена в каталоге Cloud, ее часть сохраняется в пользовательских данных учетной записи Facebook / Google.
- При дополнительном входе в систему вы можете проверить пользовательские данные в учетной записи Facebook или Google и перейти по ссылке к фактической учетной записи в облачном каталоге.
Я надеюсь это имеет смысл.