首页 > 解决方案 > 是否可以使用 Lambda 触发器 PreSignUp_AdminCreateUser 生成用户名?

问题描述

我正在考虑在username幕后自动生成,以便注册用户只需提供他们的电话号码,然后可以在不更改用户名(主要标识符)的情况下更改电话号码。

因此,我知道它可以在客户端的幕后完成,但我正在考虑使用 Cognito 中的 lambda 触发器(即PreSignUp_AdminCreateUser触发器源)来完成它。该代码运行良好,但我收到一个错误,即用户名应该是在 iOS 上的客户端调用中提交的用户名。

我的 lambda 看起来像:

"use strict";

exports.handler = function(event, context, callback) {
  if (event.triggerSource === "PreSignUp_SignUp") {
    // generate unique random username
    var username = "";
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    for (var i = 0; i < 16; i++) {
        username += possible.charAt(Math.floor(Math.random() * possible.length));
    }
    console.log("Generated a unique username: " + username);
    event.userName = username;
  }
  return callback(null, event);
};

这应该可能吗?有没有人为 Cognito 做过类似的事情?

标签: amazon-web-servicesaws-lambdaamazon-cognito

解决方案


这是不可能的。

无论触发源是PreSignUp_SignUp还是PreSignUp_AdminCreateUser,事件响应只有三个布尔参数,分别autoConfirmUser是:autoVerifyPhoneautoVerifyEmail。因此,用户名必须是事件请求中用户属性的一部分。

请参阅注册前 Lambda 触发器参数


推荐阅读