AWS提供了两种处理Cognito的方法:
-
"old one"来自
amazon-cognito-identity-js
(可能amazon-cognito-auth-js
)和 -
"new one"来自
aws-amplify
(其中包括以上内容)
经过相当多的麻烦和逆向工程后,我成功地使用 aws-amplify
locally 登录(收回CognitoIdentityCredentials)作为开发工作的一部分 .
这些步骤(承担我,因为这些对于要遵循的问题很重要,也可能对某些人有帮助):
设置
-
在Cognito控制台中创建用户池
-
在Cognito控制台中创建用户池App客户端
-
在Google控制台中创建Google Web App
-
配置Google Web App指向http://localhost:8080(我的本地开发服务器)
-
配置用户池以将Google用作身份提供商,从Google控制台向其提供Google Web App客户端ID和客户端密钥
-
在Congnito控制台中创建一个标识池,并将其配置为与Google一起作为身份提供商使用,同时提供Google Web App客户端ID
实施
- 配置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
为我的应用程序webpack包添加了一个惊人的 190K (GZIPped,缩小,优化),这使我呛到我的咖啡 .
问题1
这可以通过一个Babel插件以某种方式减少我猜测,不,因为AWS显然仍然在1995年并且在单个 Amplify
和 Auth
对象上配置所有东西) .
问题2
我是否已经使这不必要地变得复杂并且有一个更强大的解决方案?
问题3(最重要的)
这可以使用"old way" amazon-cognito-identity-js
来实现吗?
在所有(用例)中,我找不到[https://github.com/aws/aws-amplify/tree/master/packages/amazon-cognito-identity-js/]社交/联合登录的用例 .
1 回答
您可以尝试在AWS放大中使用模块化导出