Làm cách nào để thay đổi Trạng thái Người dùng FORCE_CHANGE_PASSWORD?


97

Sử dụng AWS Cognito, tôi muốn tạo người dùng giả cho mục đích thử nghiệm.

Sau đó, tôi sử dụng Bảng điều khiển AWS để tạo người dùng như vậy, nhưng người dùng đã đặt trạng thái của họ thành FORCE_CHANGE_PASSWORD. Với giá trị đó, người dùng này không thể được xác thực.

Có cách nào để thay đổi trạng thái này không?

CẬP NHẬT Hành vi tương tự khi tạo người dùng từ CLI


1
Câu trả lời của người dùng được cung cấp bởi @joe
donlys

Câu trả lời:


15

Xin lỗi bạn đang gặp khó khăn. Chúng tôi không có quy trình một bước mà bạn chỉ có thể tạo người dùng và xác thực họ trực tiếp. Chúng tôi có thể thay đổi điều này trong tương lai, chẳng hạn như để cho phép quản trị viên đặt mật khẩu mà người dùng có thể sử dụng trực tiếp. Hiện tại, khi bạn tạo người dùng bằng cách sử dụng AdminCreateUserhoặc bằng cách đăng ký người dùng với ứng dụng, bạn cần thực hiện thêm các bước bổ sung, buộc người dùng thay đổi mật khẩu khi đăng nhập hoặc yêu cầu người dùng xác minh email hoặc số điện thoại để thay đổi trạng thái của người dùng CONFIRMED.


4
Hiện tại, khi bạn tạo người dùng bằng cách sử dụng AdminCreateUser hoặc bằng cách đăng ký người dùng với ứng dụng, bạn cần thực hiện thêm các bước bổ sung, buộc người dùng thay đổi mật khẩu khi đăng nhập hoặc yêu cầu người dùng xác minh email hoặc số điện thoại để thay đổi trạng thái của người dùng thành ĐÃ XÁC NHẬN. Chính xác thì những efoorts bổ sung này là gì và làm cách nào để kích hoạt chúng từ JS SDK.
Saurabh Tiwari

3
@joe đã chỉ ra rằng bây giờ có thể, vì nó đã được thêm vào. tìm --permanentcờ: stackoverflow.com/a/56948249/3165552
isaias-b

149

Tôi biết đã lâu rồi nhưng tôi nghĩ điều này có thể giúp ích cho những người khác xem qua bài đăng này.

Bạn có thể sử dụng AWS CLI để thay đổi mật khẩu người dùng, tuy nhiên, đó là một quá trình gồm nhiều bước:


Bước 1: Nhận mã thông báo phiên cho người dùng mong muốn:

aws cognito-idp admin-initiate-auth --user-pool-id %USER POOL ID% --client-id %APP CLIENT ID% --auth-flow ADMIN_NO_SRP_AUTH --auth-parameters USERNAME=%USERS USERNAME%,PASSWORD=%USERS CURRENT PASSWORD%

Nếu điều này trả lại một lỗi về Unable to verify secret hash for client, hãy tạo một ứng dụng khách khác mà không có bí mật và sử dụng ID ứng dụng đó.

Bước 2: Nếu bước 1 thành công, nó sẽ phản hồi với thử thách NEW_PASSWORD_REQUIRED, các thông số thử thách khác và khóa phiên người dùng. Sau đó, bạn có thể chạy lệnh thứ hai để đưa ra phản hồi thách thức:

aws cognito-idp admin-respond-to-auth-challenge --user-pool-id %USER POOL ID% --client-id %CLIENT ID% --challenge-name NEW_PASSWORD_REQUIRED --challenge-responses NEW_PASSWORD=%DESIRED PASSWORD%,USERNAME=%USERS USERNAME% --session %SESSION KEY FROM PREVIOUS COMMAND with ""%

Nếu bạn gặp lỗi khi Invalid attributes given, XXX is missingchuyển các thuộc tính bị thiếu bằng cách sử dụng định dạnguserAttributes.$FIELD_NAME=$VALUE

Lệnh trên sẽ trả về Kết quả xác thực hợp lệ và các Mã thông báo thích hợp.


Quan trọng: Để điều này hoạt động, Nhóm người dùng ẩn danh PHẢI có ứng dụng khách được định cấu hình với ADMIN_NO_SRP_AUTHchức năng ( Bước 5 trong tài liệu này ).


24
Rất hữu ích. Hai mẹo nữa: nếu bạn gặp lỗi "Không thể xác minh hàm băm bí mật cho ứng dụng khách", hãy tạo một ứng dụng khách khác không có bí mật và sử dụng ứng dụng đó ( stackoverflow.com/questions/37438879/… ). Nếu bạn gặp lỗi "Thuộc tính đã cung cấp không hợp lệ, thiếu XXX", hãy chuyển các thuộc tính bị thiếu bằng cách sử dụng định dạng userAttributes.$FIELD_NAME=$VALUE( github.com/aws/aws-sdk-js/issues/1290 ).
Lane Rettig

Nếu bạn không thể đưa người dùng của mình thoát khỏi FORCE_CHANGE_PASSWORD, với bất kỳ lệnh CLI nào, (bao gồm cả câu trả lời này), hãy thử 'admin-disable-user' rồi 'admin-enable-user' hoặc sử dụng bảng điều khiển. Sau đó, người dùng thực hiện quá trình này hoặc bạn có thể sử dụng quy trình đặt lại mật khẩu bình thường. Đôi khi, người dùng sẽ 'hết hạn sử dụng' nếu người dùng không đăng nhập vào nhận thức trong giới hạn được xác định trước. (tôi nghĩ mặc định là 7 ngày)
comfytoday 28/03/18

Thử nó với CLI và bên trong một lambda, đã nhận lỗi này: Invalid thuộc tính nhất định, tên là mất tích
kolodi

1
@misher bạn đang nhận được điều đó do các thuộc tính bắt buộc. bạn có thể bao gồm chúng trong các cuộc gọi nhưng cú pháp là một chút kỳ lạ:--challenge-responses NEW_PASSWORD=password,USERNAME=username,userAttributes.picture=picture,userAttributes.name=name
edzillion

88

Điều này cuối cùng đã được thêm vào AWSCLI: https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-set-user-password.html

Bạn có thể thay đổi mật khẩu của người dùng và cập nhật trạng thái bằng cách sử dụng:

aws cognito-idp admin-set-user-password --user-pool-id <your user pool id> --username user1 --password password --permanent

Trước khi sử dụng, bạn có thể cần cập nhật AWS CLI của mình bằng cách sử dụng:

pip3 install awscli --upgrade


13
Đây là giải pháp mới nhất và hiệu quả nhất!
donlys

7
Đây nên là câu trả lời.
Mr. Young

4
Giải pháp tốt nhất và dễ dàng nhất vào năm 2020. Cảm ơn!
tudor

23

Chỉ cần thêm mã này sau khi bạn onSuccess: function (result) { ... },trong chức năng đăng nhập của bạn. Người dùng của bạn sau đó sẽ có trạng thái ĐÃ XÁC NHẬN .

newPasswordRequired: function(userAttributes, requiredAttributes) {
    // User was signed up by an admin and must provide new
    // password and required attributes, if any, to complete
    // authentication.

    // the api doesn't accept this field back
    delete userAttributes.email_verified;

    // unsure about this field, but I don't send this back
    delete userAttributes.phone_number_verified;

    // Get these details and call
    cognitoUser.completeNewPasswordChallenge(newPassword, userAttributes, this);
}

1
Điều này làm việc cho tôi. Bạn thậm chí có thể nhập mật khẩu hiện tại nếu bạn không muốn thay đổi nó.
mvandillen

Đệ quy FTW! cảm ơn! (đệ quy là thistrên thử thách mật khẩu mới hoàn chỉnh)
Paul S

22

Bạn có thể thay đổi trạng thái người dùng đó FORCE_CHANGE_PASSWORDbằng cách gọi respondToAuthChallenge()người dùng như sau:

var params = {
  ChallengeName: 'NEW_PASSWORD_REQUIRED', 
  ClientId: 'your_own3j6...0obh',
  ChallengeResponses: {
    USERNAME: 'user3',
    NEW_PASSWORD: 'changed12345'
  },
  Session: 'xxxxxxxxxxZDMcRu-5u...sCvrmZb6tHY'
};

cognitoidentityserviceprovider.respondToAuthChallenge(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

Sau đó, bạn sẽ thấy user3trạng thái đó trong bảng điều khiển CONFIRMED.


1
Tôi không hiểu làm thế nào bạn có được ở đây. Bạn đã gọi gì để có được Phiên mà bạn đã XXX? Khi tôi gọi adminInitiateAuth, tôi gặp lỗi nói rằng UserNotFoundException.
Ryan Shillington

3
Xin lỗi nếu câu trả lời đó không rõ ràng. Dưới đây là thêm chi tiết: 1. Nhóm người dùng có một ứng dụng khách có tên là 'your_own3j63rs8j16bxxxsto25db00obh' được tạo mà KHÔNG có khóa bí mật được tạo. Đoạn mã trên sẽ không hoạt động nếu máy khách được chỉ định một khóa. 2) Phần quan trọng là giá trị trả về bằng cách gọicognitoidentityserviceprovider.adminInitiateAuth({ AuthFlow: 'ADMIN_NO_SRP_AUTH', ClientId: 'your_own3j63rs8j16bxxxsto25db00obh', UserPoolId: 'us-east-1_DtNSUVT7n', AuthParameters: { USERNAME: 'user3', PASSWORD: 'original_password' } }, callback);
Ariel Araza

3) user3đã được tạo ra trong giao diện điều khiển và bước đầu đưa mật khẩu'original_password'
Ariel Araza

ĐỒNG Ý. Bây giờ tôi hiểu lý do tại sao tôi nhận được UserNotFoundException. Đó là do tôi đang sử dụng bí danh làm tên người dùng để đăng nhập, điều này hoạt động tốt trong JS API nhưng dường như không hoạt động với adminInitiateAuth. Cảm ơn Ariel Araza, tôi đánh giá cao sự giúp đỡ của bạn.
Ryan Shillington

Yay! Cuối cùng thì tôi đã làm được việc này. Cảm ơn bạn! Cảm ơn Ariel!
Ryan Shillington

11

không chắc liệu bạn có còn đang chiến đấu với điều này hay không nhưng để chỉ tạo một nhóm người dùng thử nghiệm, tôi đã sử dụng awsclinhư sau:

  1. Sử dụng lệnh con đăng ký từ cognito-idp để tạo người dùng
aws cognito-idp sign-up \
   --region %aws_project_region% \
   --client-id %aws_user_pools_web_client_id% \
   --username %email_address% \
   --password %password% \
   --user-attributes Name=email,Value=%email_address%
  1. Xác nhận người dùng bằng quản trị viên-xác nhận-đăng ký
aws cognito-idp admin-confirm-sign-up \
--user-pool-id %aws_user_pools_web_client_id% \
--username %email_address%

5

CẬP NHẬT:

Bây giờ tôi đang sử dụng cái này, được dịch để khuếch đại, bên trong NodeJS Lambda:

// enable node-fetch polyfill for Node.js
global.fetch = require("node-fetch").default;
global.navigator = {};

const AWS = require("aws-sdk");
const cisp = new AWS.CognitoIdentityServiceProvider();

const Amplify = require("@aws-amplify/core").default;
const Auth = require("@aws-amplify/auth").default;

...


/*
  this_user: {
    given_name: string,
    password: string,
    email: string,
    cell: string
  }
*/
const create_cognito = (this_user) => {
  let this_defaults = {
    password_temp: Math.random().toString(36).slice(-8),
    password: this_user.password,
    region: global._env === "prod" ? production_region : development_region,
    UserPoolId:
      global._env === "prod"
        ? production_user_pool
        : development_user_pool,
    ClientId:
      global._env === "prod"
        ? production_client_id
        : development_client_id,
    given_name: this_user.given_name,
    email: this_user.email,
    cell: this_user.cell,
  };

  // configure Amplify
  Amplify.configure({
    Auth: {
      region: this_defaults.region,
      userPoolId: this_defaults.UserPoolId,
      userPoolWebClientId: this_defaults.ClientId,
    },
  });
  if (!Auth.configure())
    return Promise.reject("could not configure amplify");

  return new Promise((resolve, reject) => {
    let _result = {};

    let this_account = undefined;
    let this_account_details = undefined;

    // create cognito account
    cisp
      .adminCreateUser({
        UserPoolId: this_defaults.UserPoolId,
        Username: this_defaults.given_name,
        DesiredDeliveryMediums: ["EMAIL"],
        ForceAliasCreation: false,
        MessageAction: "SUPPRESS",
        TemporaryPassword: this_defaults.password_temp,
        UserAttributes: [
          { Name: "given_name", Value: this_defaults.given_name },
          { Name: "email", Value: this_defaults.email },
          { Name: "phone_number", Value: this_defaults.cell },
          { Name: "email_verified", Value: "true" },
        ],
      })
      .promise()
      .then((user) => {
        console.warn(".. create_cognito: create..");
        _result.username = user.User.Username;
        _result.temporaryPassword = this_defaults.password_temp;
        _result.password = this_defaults.password;

        // sign into cognito account
        return Auth.signIn(_result.username, _result.temporaryPassword);
      })
      .then((user) => {
        console.warn(".. create_cognito: signin..");

        // complete challenge
        return Auth.completeNewPassword(user, _result.password, {
          email: this_defaults.email,
          phone_number: this_defaults.cell,
        });
      })
      .then((user) => {
        console.warn(".. create_cognito: confirmed..");
        this_account = user;
        // get details
        return Auth.currentAuthenticatedUser();
      })
      .then((this_details) => {
        if (!(this_details && this_details.attributes))
          throw "account creation failes";

        this_account_details = Object.assign({}, this_details.attributes);

        // signout
        return this_account.signOut();
      })
      .then(() => {
        console.warn(".. create_cognito: complete");
        resolve(this_account_details);
      })
      .catch((err) => {
        console.error(".. create_cognito: error");
        console.error(err);
        reject(err);
      });
  });
};

Tôi đang đặt mật khẩu tạm thời và sau đó đặt lại nó thành mật khẩu yêu cầu của người dùng.

BÀI ĐĂNG CŨ:

Bạn có thể giải quyết vấn đề này bằng cách sử dụng SDK amazon-cognito-ID-js bằng cách xác thực bằng mật khẩu tạm thời sau khi tạo tài khoản cognitoidentityserviceprovider.adminCreateUser()và chạy cognitoUser.completeNewPasswordChallenge()bên trong cognitoUser.authenticateUser( ,{newPasswordRequired})- tất cả đều nằm trong hàm tạo người dùng của bạn.

Tôi đang sử dụng mã bên dưới bên trong AWS lambda để tạo tài khoản người dùng Ẩn danh được bật. Tôi chắc chắn rằng nó có thể được tối ưu hóa, hãy kiên nhẫn với tôi. Đây là bài viết đầu tiên của tôi và tôi vẫn còn khá mới đối với 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 });
    });

@Tom - nó có hiệu quả với bạn không? bất cứ điều gì tôi có thể làm rõ?
qqan.ny

Tốt hơn nhiều bây giờ.
Tom Aranda

@ qqan.ny sử dụng lời hứa và lệnh gọi lại cùng một lúc? Tại sao?
Iurii Golskyi

@Iurii Golskyi - hồi đó tôi không biết rõ hơn, chỉ mới bắt đầu học cả AWS và JS từ đầu.
qqan.ny

4

Đối với Java SDK, giả sử ứng dụng khách Cognito của bạn được thiết lập và bạn có người dùng của mình ở trạng thái FORCE_CHANGE_PASSWORD, bạn có thể làm như sau để người dùng của bạn được XÁC NHẬN ... và sau đó xác thực như bình thường.

AdminCreateUserResult createUserResult = COGNITO_CLIENT.adminCreateUser(createUserRequest());

AdminInitiateAuthResult authResult = COGNITO_CLIENT.adminInitiateAuth(authUserRequest());


Map<String,String> challengeResponses = new HashMap<>();
challengeResponses.put("USERNAME", USERNAME);
challengeResponses.put("NEW_PASSWORD", PASSWORD);
RespondToAuthChallengeRequest respondToAuthChallengeRequest = new RespondToAuthChallengeRequest()
      .withChallengeName("NEW_PASSWORD_REQUIRED")
      .withClientId(CLIENT_ID)
      .withChallengeResponses(challengeResponses)
      .withSession(authResult.getSession());

COGNITO_CLIENT.respondToAuthChallenge(respondToAuthChallengeRequest);

Hy vọng nó sẽ hữu ích với các thử nghiệm tích hợp đó (Xin lỗi về định dạng)


4

Về cơ bản đây là câu trả lời tương tự nhưng đối với .Net C # SDK:

Phần sau sẽ thực hiện tạo người dùng quản trị đầy đủ với tên người dùng và mật khẩu mong muốn. Có mô hình Người dùng sau:

public class User
{
    public string Username { get; set; }
    public string Password { get; set; }
}

Bạn có thể tạo người dùng và sẵn sàng sử dụng bằng cách sử dụng:

   public void AddUser(User user)
    {
        var tempPassword = "ANY";
        var request = new AdminCreateUserRequest()
        {
            Username = user.Username,
            UserPoolId = "MyuserPoolId",
            TemporaryPassword = tempPassword
        };
        var result = _cognitoClient.AdminCreateUserAsync(request).Result;
        var authResponse = _cognitoClient.AdminInitiateAuthAsync(new AdminInitiateAuthRequest()
        {
            UserPoolId = "MyuserPoolId",
            ClientId = "MyClientId",
            AuthFlow = AuthFlowType.ADMIN_NO_SRP_AUTH,
            AuthParameters = new Dictionary<string, string>()
            {
                {"USERNAME",user.Username },
                {"PASSWORD", tempPassword}
            }
        }).Result;
        _cognitoClient.RespondToAuthChallengeAsync(new RespondToAuthChallengeRequest()
        {
         ClientId = "MyClientId",
            ChallengeName = ChallengeNameType.NEW_PASSWORD_REQUIRED,
            ChallengeResponses = new Dictionary<string, string>()
            {
                {"USERNAME",user.Username },
                {"NEW_PASSWORD",user.Password }
            },
            Session = authResponse.Session
        });
    }

3

Nếu bạn đang cố gắng thay đổi trạng thái là quản trị viên từ bảng điều khiển. Sau đó làm theo các bước dưới đây sau khi tạo người dùng.

  1. Trong goto ẩn danh -> "quản lý nhóm người dùng" ->
  2. Chuyển đến "Cài đặt ứng dụng khách" trong phần Tích hợp ứng dụng.
  3. Kiểm tra các mục bên dưới i) Nhóm người dùng ẩn danh ii) Cấp mã ủy quyền iii) Cấp phép ngầm iv) điện thoại v) email vi) openid vii) aws.cognito.signin.user.admin viii) hồ sơ
  4. Nhập url gọi lại của ứng dụng của bạn. Nếu bạn không chắc chắn, hãy nhập, ví dụ: https://google.com và sau này, bạn có thể thay đổi nó thành url gọi lại thực của mình
  5. bấm vào lưu thay đổi.
  6. Sau khi các thay đổi được lưu, hãy nhấp vào liên kết "Khởi chạy giao diện người dùng được lưu trữ"
  7. Nhập thông tin đăng nhập của người dùng mới được tạo
  8. Đặt lại mật khẩu bằng thông tin đăng nhập mới và chia sẻ mật khẩu đó với người dùng

bước 2

bước 3 4 5 6

bước 7

bước 8


2

Tôi biết Đó là câu trả lời tương tự, nhưng tôi nghĩ nó có thể giúp ích cho Gocộng đồng nhà phát triển. về cơ bản nó đang bắt đầu yêu cầu xác thực, nhận phiên và phản hồi thử tháchNEW_PASSWORD_REQUIRED

func sessionWithDefaultRegion(region string) *session.Session {
    sess := Session.Copy()
    if v := aws.StringValue(sess.Config.Region); len(v) == 0 {
        sess.Config.Region = aws.String(region)
    }

    return sess
}



func (c *CognitoAppClient) ChangePassword(userName, currentPassword, newPassword string)   error {

    sess := sessionWithDefaultRegion(c.Region)
    svc := cognitoidentityprovider.New(sess)

    auth, err := svc.AdminInitiateAuth(&cognitoidentityprovider.AdminInitiateAuthInput{
        UserPoolId:aws.String(c.UserPoolID),
        ClientId:aws.String(c.ClientID),
        AuthFlow:aws.String("ADMIN_NO_SRP_AUTH"),
        AuthParameters: map[string]*string{
            "USERNAME": aws.String(userName),
            "PASSWORD": aws.String(currentPassword),
        },

    })



    if err != nil {
        return err
    }

    request := &cognitoidentityprovider.AdminRespondToAuthChallengeInput{
        ChallengeName: aws.String("NEW_PASSWORD_REQUIRED"),
        ClientId:aws.String(c.ClientID),
        UserPoolId: aws.String(c.UserPoolID),
        ChallengeResponses:map[string]*string{
            "USERNAME":aws.String(userName),
            "NEW_PASSWORD": aws.String(newPassword),
        },
        Session:auth.Session,
    }


    _, err = svc.AdminRespondToAuthChallenge(request)

    return err 
}

Đây là một bài kiểm tra đơn vị:

import (
    "fmt"
    "github.com/aws/aws-sdk-go/service/cognitoidentityprovider"
    . "github.com/smartystreets/goconvey/convey"
    "testing"
)


func TestCognitoAppClient_ChangePassword(t *testing.T) {


    Convey("Testing ChangePassword!", t, func() {
        err := client.ChangePassword("user_name_here", "current_pass", "new_pass")



        Convey("Testing ChangePassword Results!", func() {
            So(err, ShouldBeNil)

        })

    })
}

1

ĐỒNG Ý. Cuối cùng tôi đã có mã nơi quản trị viên có thể tạo người dùng mới. Quá trình diễn ra như sau:

  1. Quản trị viên tạo người dùng
  2. Người dùng nhận được email có mật khẩu tạm thời của họ
  3. Người dùng đăng nhập và được yêu cầu thay đổi mật khẩu của họ

Bước 1 là phần khó. Đây là mã của tôi để tạo người dùng trong Node JS:

let params = {
  UserPoolId: "@cognito_pool_id@",
  Username: username,
  DesiredDeliveryMediums: ["EMAIL"],
  ForceAliasCreation: false,
  UserAttributes: [
    { Name: "given_name", Value: firstName },
    { Name: "family_name", Value: lastName},
    { Name: "name", Value: firstName + " " + lastName},
    { Name: "email", Value: email},
    { Name: "custom:title", Value: title},
    { Name: "custom:company", Value: company + ""}
  ],
};
let cognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider();
cognitoIdentityServiceProvider.adminCreateUser(params, function(error, data) {
  if (error) {
    console.log("Error adding user to cognito: " + error, error.stack);
    reject(error);
  } else {
    // Uncomment for interesting but verbose logging...
    //console.log("Received back from cognito: " + CommonUtils.stringify(data));
    cognitoIdentityServiceProvider.adminUpdateUserAttributes({
      UserAttributes: [{
        Name: "email_verified",
        Value: "true"
      }],
      UserPoolId: "@cognito_pool_id@",
      Username: username
    }, function(err) {
      if (err) {
        console.log(err, err.stack);
      } else {
        console.log("Success!");
        resolve(data);
      }
    });
  }
});

Về cơ bản, bạn cần gửi lệnh thứ hai để buộc email được coi là đã được xác minh. Người dùng vẫn cần truy cập email của họ để lấy mật khẩu tạm thời (mật khẩu này cũng xác minh email). Nhưng nếu không có cuộc gọi thứ hai đặt email đó thành xác minh, bạn sẽ không nhận được cuộc gọi lại phù hợp để đặt lại mật khẩu của họ.


Tôi vẫn không nhận được e-mail, bất kỳ đề nghị?
Vinicius

Kỳ lạ, Bạn đã thiết lập địa chỉ email chính xác trong Cognito, với quyền truy cập vào SES, v.v. chưa? Cogntio sẽ không chỉ gửi email cho mọi người cho đến khi bạn đã xác minh địa chỉ email mà bạn đang cố gắng gửi đến hoặc bạn được chấp thuận để gửi cho bất kỳ ai.
Ryan Shillington

Tôi nhận được e-mail mã xác nhận, vì vậy cài đặt là chính xác. Chỉ là e-mail với mật khẩu tạm thời không bao giờ đến ... Cuối cùng tôi đã tạo một lambda gắn với trình kích hoạt đăng ký trước để gửi e-mail.
Vinicius
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.