Amazon Cognito
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

示例:使用 JavaScript 开发工具包

向应用程序注册用户

您需要提供 UserPoolIdClientId,并使用用户名称、密码、属性列表和验证数据进行注册,以创建 CognitoUserPool 对象。

var poolData = { UserPoolId : 'us-east-1_TcoKGbf7n', ClientId : '4pe2usejqcdmhi0a25jp4b5sh3' }; var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData); var attributeList = []; var dataEmail = { Name : 'email', Value : 'email@mydomain.com' }; var dataPhoneNumber = { Name : 'phone_number', Value : '+15555555555' }; var attributeEmail = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmail); var attributePhoneNumber = new AmazonCognitoIdentity.CognitoUserAttribute(dataPhoneNumber); attributeList.push(attributeEmail); attributeList.push(attributePhoneNumber); userPool.signUp('username', 'password', attributeList, null, function(err, result){ if (err) { alert(err); return; } cognitoUser = result.user; console.log('user name is ' + cognitoUser.getUsername()); });

删除经过身份验证的用户

cognitoUser.deleteUser(function(err, result) { if (err) { alert(err); return; } console.log('call result: ' + result); });

从本地存储中检索当前用户

var data = { UserPoolId : 'us-east-1_Iqc12345', ClientId : '12345du353sm7khjj1q' }; var userPool = new AmazonCognitoIdentity.CognitoUserPool(data); var cognitoUser = userPool.getCurrentUser(); if (cognitoUser != null) { cognitoUser.getSession(function(err, session) { if (err) { alert(err); return; } console.log('session validity: ' + session.isValid()); }); }

对用户进行身份验证

以下示例对用户进行身份验证并与 Amazon Cognito 服务建立用户会话。

注意

如果用户是管理员在控制台中创建的,而不是通过上述 JavaScript 示例创建的,请参阅示例:处理使用适用于 Android 的 移动软件开发工具包中的 AdminCreateUser API 创建的用户以管理员身份创建用户账户

var authenticationData = { Username : 'username', Password : 'password', }; var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData); var poolData = { UserPoolId : 'us-east-1_TcoKGbf7n', ClientId : '4pe2usejqcdmhi0a25jp4b5sh3' }; var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData); var userData = { Username : 'username', Pool : userPool }; var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData); cognitoUser.authenticateUser(authenticationDetails, { onSuccess: function (result) { var accessToken = result.getAccessToken().getJwtToken(); /* Use the idToken for Logins Map when Federating User Pools with identity pools or when passing through an Authorization Header to an API Gateway Authorizer*/ var idToken = result.idToken.jwtToken; }, onFailure: function(err) { alert(err); }, });

针对用户池启用 MFA

以下示例将针对用户池启用多重验证 (MFA),该用户池针对经过身份验证的用户提供可选 MFA 设置。

cognitoUser.enableMFA(function(err, result) { if (err) { alert(err); return; } console.log('call result: ' + result); });

针对用户池禁用 MFA

以下示例将针对用户池禁用多重验证 (MFA),该用户池针对经过身份验证的用户提供可选 MFA 设置。

cognitoUser.disableMFA(function(err, result) { if (err) { alert(err); return; } console.log('call result: ' + result); });

创建用户池对象

var data = { UserPoolId : 'us-east-1_q2Y6U8uuY', ClientId : '224kjog47ojnt9ov773erj7qn9' }; var userPool = new AmazonCognitoIdentity.CognitoUserPool(data);

注册应用程序

var attribute = { Name : 'email', Value : 'email@mydomain.com' }; var attributeEmail = new AmazonCognitoIdentity.CognitoUserAttribute(attribute); var attributeList = []; attributeList.push(attributeEmail); var cognitoUser; userPool.signUp('username', 'password', attributeList, null, function(err, result) { if (err) { alert(err); return; } cognitoUser = result.user; });

在已启用 MFA 的情况下进行登录

var userData = { Username : 'username', Pool : userPool }; cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData); var authenticationData = { Username : 'username', Password : 'password', }; var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData); cognitoUser.authenticateUser(authenticationDetails, { onSuccess: function (result) { alert('authentication successful!') }, onFailure: function(err) { alert(err); }, mfaRequired: function(codeDeliveryDetails) { var verificationCode = prompt('Please input verification code' ,''); cognitoUser.sendMFACode(verificationCode, this); } });

更新属性

以下示例将更新经过身份验证的用户的用户属性。

var attributeList = []; var attribute = { Name : 'nickname', Value : 'joe' }; var attribute = new AmazonCognitoIdentity.CognitoUserAttribute(attribute); attributeList.push(attribute); cognitoUser.updateAttributes(attributeList, function(err, result) { if (err) { alert(err); return; } console.log('call result: ' + result); });

删除属性

以下示例将删除经过身份验证的用户的用户属性。

var attributeList = []; attributeList.push('nickname'); cognitoUser.deleteAttributes(attributeList, function(err, result) { if (err) { alert(err); return; } console.log('call result: ' + result); });

验证属性

以下示例将验证经过身份验证的用户的用户属性。

cognitoUser.getAttributeVerificationCode('email', { onSuccess: function (result) { console.log('call result: ' + result); }, onFailure: function(err) { alert(err); }, inputVerificationCode: function() { var verificationCode = prompt('Please input verification code: ' ,''); cognitoUser.verifyAttribute('email', verificationCode, this); } });

检索属性

以下示例将检索经过身份验证的用户的用户属性。

cognitoUser.getUserAttributes(function(err, result) { if (err) { alert(err); return; } for (i = 0; i < result.length; i++) { console.log('attribute ' + result[i].getName() + ' has value ' + result[i].getValue()); } });

重新发送确认代码

以下示例通过 SMS 重新发送确认代码,以确认未经身份验证的用户的注册。

cognitoUser.resendConfirmationCode(function(err, result) { if (err) { alert(err); return; } alert(result); });

确认注册

cognitoUser.confirmRegistration('123456', true, function(err, result) { if (err) { alert(err); return; } alert(result); });

更改密码

以下示例将更改经过身份验证的用户的当前密码。

cognitoUser.changePassword('oldPassword', 'newPassword', function(err, result) { if (err) { alert(err); return; } console.log('call result: ' + result); });

忘记密码流程

以下示例将针对未经身份验证的用户启动并完成忘记密码流程。

cognitoUser.forgotPassword({ onSuccess: function (result) { console.log('call result: ' + result); }, onFailure: function(err) { alert(err); }, inputVerificationCode() { var verificationCode = prompt('Please input verification code ' ,''); var newPassword = prompt('Enter new password ' ,''); cognitoUser.confirmPassword(verificationCode, newPassword, this); } });

删除用户

以下示例将删除经过身份验证的用户。

cognitoUser.deleteUser(function(err, result) { if (err) { alert(err); return; } console.log('call result: ' + result); });

注销用户

以下示例将从应用程序中注销当前用户。

if (cognitoUser != null) { cognitoUser.signOut(); }

在全局范围内注销用户

以下示例将通过使所有发出的令牌失效,在全局范围内注销当前用户。

cognitoUser.globalSignOut();

获取当前用户

以下示例将从本地存储中检索当前用户。

var data = { UserPoolId : '...', // Your user pool id here ClientId : '...' // Your client id here }; var userPool = new AmazonCognitoIdentity.CognitoUserPool(data); var cognitoUser = userPool.getCurrentUser(); if (cognitoUser != null) { cognitoUser.getSession(function(err, session) { if (err) { alert(err); return; } console.log('session validity: ' + session.isValid()); AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId : '...' // your identity pool id here Logins : { // Change the key below according to the specific region your user pool is in. 'cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>' : session.getIdToken().getJwtToken() } }); // Instantiate aws sdk service objects now that the credentials have been updated. // example: var s3 = new AWS.S3(); }); }

将用户池中的用户与身份池相集成

以下示例会将用户池中的当前用户与指定的身份池相集成。

var cognitoUser = userPool.getCurrentUser(); if (cognitoUser != null) { cognitoUser.getSession(function(err, result) { if (result) { console.log('You are now logged in.'); // Add the User's Id Token to the Cognito credentials login map. AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'YOUR_IDENTITY_POOL_ID', Logins: { 'cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>': result.getIdToken().getJwtToken() } }); } }); } //call refresh method in order to authenticate user and get new temp credentials AWS.config.credentials.refresh((error) => { if (error) { console.error(error); } else { console.log('Successfully logged!'); } });

列出用户的所有设备

以下示例将列出经过身份验证的用户的所有设备。在本例中,我们需要针对一次检索的设备数量进行限制。首次调用时,分页标记应为空。首次调用会返回分页标记,应在所有后续调用中传递此标记。

cognitoUser.listDevices(limit, paginationToken, { onSuccess: function (result) { console.log('call result: ' + result); }, onFailure: function(err) { alert(err); } });

列出设备信息

以下示例将列出有关当前设备的信息。

cognitoUser.listDevices(limit, paginationToken, { onSuccess: function (result) { console.log('call result: ' + result); }, onFailure: function(err) { alert(err); } });

记住设备

以下示例将记住设备。

cognitoUser.setDeviceStatusRemembered({ onSuccess: function (result) { console.log('call result: ' + result); }, onFailure: function(err) { alert(err); } });

不记住设备

以下示例会将设备标记为“不需要记住”。

cognitoUser.setDeviceStatusNotRemembered({ onSuccess: function (result) { console.log('call result: ' + result); }, onFailure: function(err) { alert(err); } });

不记住设备

以下示例将忘记当前设备。

cognitoUser.forgetDevice({ onSuccess: function (result) { console.log('call result: ' + result); }, onFailure: function(err) { alert(err); } });

确认已注册但未经身份验证的用户

以下示例将使用通过 SMS 消息收到的确认代码,确认已注册但未经身份验证的用户。

var poolData = { UserPoolId : 'us-east-1_TcoKGbf7n', ClientId : '4pe2usejqcdmhi0a25jp4b5sh3' }; var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData); var userData = { Username : 'username', Pool : userPool }; var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData); cognitoUser.confirmRegistration('123456', true, function(err, result) { if (err) { alert(err); return; } console.log('call result: ' + result); });

选择 MFA 方法并使用 TOTP 进行身份验证

以下示例选择 MFA 方法并使用 TOTP 进行身份验证。

var authenticationData = { Username : 'username', Password : 'password', }; var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData); var poolData = { UserPoolId : '...', // Your user pool id here ClientId : '...' // Your client id here }; var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData); var userData = { Username : 'username', Pool : userPool }; var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData); cognitoUser.authenticateUser(authenticationDetails, { onSuccess: function (result) { var accessToken + ' + result.getAccessToken().getJwtToken()); }, onFailure: function(err) { alert(err); }, mfaSetup: function(challengeName, challengeParameters) { cognitoUser.associateSoftwareToken(this); }, associateSecretCode : function(secretCode) { var challengeAnswer = prompt('Please input the TOTP code.' ,''); cognitoUser.verifySoftwareToken(challengeAnswer, 'My TOTP device', this); }, selectMFAType : function(challengeName, challengeParameters) { var mfaType = prompt('Please select the MFA method.', ''); cognitoUser.sendMFASelectionAnswer(mfaType, this); }, totpRequired : function(secretCode) { var challengeAnswer = prompt('Please input the TOTP code.' ,''); cognitoUser.sendMFACode(challengeAnswer, this, 'SOFTWARE_TOKEN_MFA'); } });

启用并设置 SMS MFA 作为用户首选的 MFA 方法

以下示例启用并设置 SMS MFA 作为用户首选的 MFA 方法。

smsMfaSettings = { PreferredMfa : true, Enabled : true }; cognitoUser.setUserMfaPreference(smsMfaSettings, null, function(err, result) { if (err) { alert(err); } console.log('call result ' + result) });

启用并设置 TOTP 软件令牌 MFA 作为用户首选的 MFA 方法

以下示例启用并设置 TOTP 软件令牌 MFA 作为用户首选的 MFA 方法。

totpMfaSettings = { PreferredMfa : true, Enabled : true }; cognitoUser.setUserMfaPreference(null, totpMfaSettings, function(err, result) { if (err) { alert(err); } console.log('call result ' + result) });