创建 Stormpath 用户并在一次调用中分配给组

Create Stormpath user and assign to group in one call

我想向组提交用户创建请求,但不确定如何在 express-stormpath 中执行此操作。

现在我使用预注册和 post 注册处理程序获取一个字段,将其从 formData 中删除,传递给 res,然后在 post 注册处理程序上设置组:

preRegistrationHandler: function (formData, req, res, next) {
    res.locals.describes = formData.describes;
    delete formData.describes;

    next();
},

postRegistrationHandler: function (account, req, res, next) {
    var seekerHref = config.SEEKERS_HREF;
    var employerHref = config.EMPLOYERS_HREF;

    if (res.locals.describes === "seeker") {
        //Adding to seeker group
        account.addToGroup(seekerHref, function(err, membership) {
            console.log(membership);
        });
    } else if (res.locals.describes === "employers") {
        //Adding to the employer group
        account.addToGroup(employerHref, function(err, membership) {
            console.log(membership);
        });
    }
    delete res.locals.describes;

    next();
}

这似乎不是个好主意。如果连接不可用并且组分配失败会怎样?用户可能会在没有组的情况下陷入困境。

另一种方法是将值保存到帐户的自定义数据对象中,然后使用它来创建组。

如果您在 form configuration:

中定义表单字段,则 express-stormpath 会自动将其保存到自定义数据
web: {
  register: {
    form: {
      fields: {
        describes: {
          enabled: true,
          label: 'Position',
          name: 'describes',
          placeholder: 'e.g. employer, seeker',
          required: true,
          type: 'text'
        }
      }
    }
  }
}

然后,在您的 post-注册处理程序中,检索自定义数据值并使用它来分配组:

postRegistrationHandler: function (account, req, res, next) {
    var seekerHref = config.SEEKERS_HREF;
    var employerHref = config.EMPLOYERS_HREF;

    account.getCustomData(function(err, customData) {
        if (customData.describes === "seeker") {
            //Adding to seeker group
            account.addToGroup(seekerHref, function(err, membership) {
                console.log(membership);
            });
        } else if (customData.describes === "employers") {
            //Adding to the employer group
            account.addToGroup(employerHref, function(err, membership) {
                console.log(membership);
            });
        }

        customData.remove('describes');
        customData.save(function(err) {
            if (err) throw err;
        });
    });

    next();
}

这样一来,您就可以保证价值得到保存。如果 post- 注册处理程序由于某种原因失败,您可以通过检查帐户的自定义数据资源来了解用户应该属于哪个组。