Вы можете решить эту проблему с помощью амазонки-Cognito-тождественного-JS SDK посредством аутентификации с временным паролем, после создания учетной записи с cognitoidentityserviceprovider.adminCreateUser()
и работает cognitoUser.completeNewPasswordChallenge()
в cognitoUser.authenticateUser(,{newPasswordRequired})
- все внутри функции, которая создает свой пользователь.
Я использую приведенный ниже код внутри лямбда AWS для создания учетных записей пользователей Cognito. Я уверен, что его можно оптимизировать, быть терпеливым со мной. Это мой первый пост, и я до сих пор довольно новичок в JavaScript.
var AWS = require("aws-sdk");
var AWSCognito = require("amazon-cognito-identity-js");
var params = {
UserPoolId: your_poolId,
Username: your_username,
DesiredDeliveryMediums: ["EMAIL"],
ForceAliasCreation: false,
MessageAction: "SUPPRESS",
TemporaryPassword: your_temporaryPassword,
UserAttributes: [
{ Name: "given_name", Value: your_given_name },
{ Name: "email", Value: your_email },
{ Name: "phone_number", Value: your_phone_number },
{ Name: "email_verified", Value: "true" }
]
};
var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
let promise = new Promise((resolve, reject) => {
cognitoidentityserviceprovider.adminCreateUser(params, function(err, data) {
if (err) {
reject(err);
} else {
resolve(data);
}
});
});
promise
.then(data => {
// login as new user and completeNewPasswordChallenge
var anotherPromise = new Promise((resolve, reject) => {
var authenticationDetails = new AWSCognito.AuthenticationDetails({
Username: your_username,
Password: your_temporaryPassword
});
var poolData = {
UserPoolId: your_poolId,
ClientId: your_clientId
};
var userPool = new AWSCognito.CognitoUserPool(poolData);
var userData = {
Username: your_username,
Pool: userPool
};
var cognitoUser = new AWSCognito.CognitoUser(userData);
let finalPromise = new Promise((resolve, reject) => {
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function(authResult) {
cognitoUser.getSession(function(err) {
if (err) {
} else {
cognitoUser.getUserAttributes(function(
err,
attResult
) {
if (err) {
} else {
resolve(authResult);
}
});
}
});
},
onFailure: function(err) {
reject(err);
},
newPasswordRequired(userAttributes, []) {
delete userAttributes.email_verified;
cognitoUser.completeNewPasswordChallenge(
your_newPoassword,
userAttributes,
this
);
}
});
});
finalPromise
.then(finalResult => {
// signout
cognitoUser.signOut();
// further action, e.g. email to new user
resolve(finalResult);
})
.catch(err => {
reject(err);
});
});
return anotherPromise;
})
.then(() => {
resolve(finalResult);
})
.catch(err => {
reject({ statusCode: 406, error: err });
});
Да, я хочу иметь возможность создавать API-доступ к моему приложению и давать пользователю их имя пользователя и пароль. Я не хочу, чтобы они могли его изменить. – Craig
Я нахожусь в аналогичном сценарии, где менее техническим людям хотелось бы управлять пользователями из пользовательского интерфейса AWS Cognito. Просто хочу, чтобы создать пользователя, а затем отправить им свои учетные записи для входа в систему. Ответ «completeNewPasswordChallenge» на самом деле позволил мне сделать именно это, но чувствует себя грязным от клиента. – pjdicke