AWS提供了两种处理Cognito的方法:
amazon-cognito-identity-js
(可能还有amazon-cognito-auth-js
)和aws-amplify
(包含上述内容)经过相当多的麻烦和逆向工程后,我成功地使用aws-amplify
本地登录(收回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.configure({ Auth: { identityPoolId: , region: , userPoolId: , userPoolWebClientId: } });
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);
window.gapi.load('auth2', function() { window.gapi.auth2.init({ client_id: , scope: 'profile email openid' }); });
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捆绑包(GZIPped,缩小版,优化版)添加了一个高达 190K ,这让我呛到了我的咖啡。
这可以通过我丢失的Babel插件以某种方式减少(我猜,不,因为AWS显然仍然在1995年并且在单个Amplify
和Auth
对象上配置所有内容)
我是否已经使这不必要地变得复杂并且有一个更强大的解决方案?
是否可以使用“旧方式”amazon-cognito-identity-js
来实现这一目标,这个方法要小得多?
我找不到所有(用例)[https://github.com/aws/aws-amplify/tree/master/packages/amazon-cognito-identity-js/]用于社交/联合登录的用例。
答案 0 :(得分:1)
对我来说,两者之间的区别
import Amplify from 'aws-amplify'
和
import Amplify from '@aws-amplify/core'
已优化并缩小了约500kB。
我想你也想要
import Auth from '@aws-amplify/auth'
仅增加一点点。
但是我同意,aws-amplify包确实很大,而且不容易弄清楚如何直接使用核心组件(例如aws-cognito-identity-js / es和aws-cognito-auth-js / es)。
答案 1 :(得分:0)
您可以尝试在AWS Amplify中使用模块化导出