AWS предоставляет два возможных способа работы с Cognito:
- «старый» через
amazon-cognito-identity-js
(и, возможно, amazon-cognito-auth-js
) и - «новый» через
aws-amplify
(что включает в себя вышеупомянутое)
После многих хлопот и обратного инжиниринга мне удалось войти (получить CognitoIdentityCredentials), используя aws-amplify
локально как часть усилий по разработке.
Шаги, на которых (имейте в виду, поскольку они важны для вопросов, которым нужно следовать, а также могут помочь кому-то):
Настройка
Создание пула пользователей в консоли Cognito
Создание клиента приложения пула пользователей в консоли Cognito
СоздатьGoogle Web App в консоли Google
Настройка Google Web App для указания http://localhost:8080 (мой локальный сервер разработки)
НастройкаПул пользователей для использования Google в качестве провайдера идентификации, предоставляющий ему идентификатор клиента Google Web App и секрет клиентаom Google Console
Создайте пул удостоверений в консоли Congnito и настройте его для работы с Google в качестве поставщика удостоверений, указав там также идентификатор клиента Google Web App
Реализация
- Настройка Amplify.Auth:
Amplify.configure({
Auth: {
identityPoolId: ,
region: ,
userPoolId: ,
userPoolWebClientId:
}
});
Вставить скрипт Google API:
const script = document.createElement('script');
script.src = 'https://apis.google.com/js/platform.js';
script.async = true;
script.onload = this.initGapi;
document.body.appendChild(script);
Инициировать Google API:
window.gapi.load('auth2', function() {
window.gapi.auth2.init({
client_id: ,
scope: 'profile email openid'
});
});
Разрешить пользователю Google петь одним нажатием кнопки:
const ga = window.gapi.auth2.getAuthInstance();
const googleUser = await ga.signIn();
const {id_token, expires_at} = googleUser.getAuthResponse();
const profile = googleUser.getBasicProfile();
Используйте
profile
,
id_token
,
expires_at
выше для создания сеанса учетных данных Cognito:
const user = {
email: profile.getEmail(),
name: profile.getName()
};
const credentials = await Auth.federatedSignIn(
'google',
{token: id_token, expires_at},
user
);
В этот момент был возвращен объект CognitoIdentityCredentials
, правильно заполненный,с токеном и всем ...
Проблема
К сожалению, aws-amplify
добавляет колоссальные 190K к моему пакету веб-пакетов приложения (GZIPped, минимизированный, оптимизированный), который сделаля подавился кофе.
Вопрос 1
Можно ли это как-то уменьшить с помощью плагина Babel, который мне не хватает (наверное, нет, так как AWS, видимо, еще в 1995 году и настраиваетвсе на единичных объектах Amplify
и Auth
).
Вопрос 2
Я сделал это излишне сложным, и есть гораздо более надежное решение?
Вопрос3 (самое главное)
Можно ли это сделать, используя "старый способ" amazon-cognito-identity-js
, который НАМНОГО МЕНЬШЕ?
Я не смог найти среди всех (варианты использования)[https://github.com/aws/aws-amplify/tree/master/packages/amazon-cognito-identity-js/] сценарий использования социальной / федеративной регистрации.