auth0 - user_metadata类型无效

时间:2017-04-07 00:13:55

标签: reactjs auth0

我正在使用Auth0进行用户管理,我正在尝试在注册时添加一些默认的user_metadata。我的注册代码如下所示:

// signs a user up
signup(email, password, callback, metadata){
    const defaultVals = {
        app_complete: false,
        app_decision: 'unknown',
        app_term: this.getAppTerm(),
        nickname: '',
        middle_initial: '',
        current_age: '10',
    }

    const meta = Object.assign({}, defaultVals, metadata);

    console.log(meta);

this.auth0.redirect.signupAndLogin({
  connection: 'Username-Password-Authentication',
  email,
  password,
        user_metadata: meta,
}, function(err, authResult) {
  if (err != undefined) {
    callback(err);
            console.log(err);
            return;
  }
});}

问题是,每当我尝试传递user_metadata属性app_complete: false时,API都会返回错误,指出数据类型false无效,并且只允许字符串。错误消息:user_metadata.app_complete类型无效(仅允许使用字符串)。

我知道JSON允许除字符串以外的类型,因为我可以通过Auth0用户仪表板将其更改为false。为什么auth0 WebAuth对象的注册方法会返回此错误?

感谢。

2 个答案:

答案 0 :(得分:0)

这是因为对于在user_metadata中进行注册,您只能提供字符串作为值。

The user metadata to be associated with the user. If set, the field must be an object containing no more than ten properties. Property names can have a maximum of 100 characters, and property values must be strings of no more than 500 characters.
另一方面,

PATCH支持user_metadata中的完整JSON类型。

此处是github auth0-js issue

中的参考

答案 1 :(得分:0)

您可以在 signupAndLogin ()(/dbconnections/signup端点)方法中传递 user_metadata 。但是,它具有如下所述的一些限制。

  

要与用户关联的用户元数据。如果设置,则该字段   必须是包含不超过十个属性的对象。属性   名称最多可以包含100个字符,并且属性值必须   是不超过500个字符的字符串。

要解决此问题,请将属性值作为字符串传递。

或者,可以在第一次登录时使用auth0规则并更新 user_metadata ,而不是在请求中传递 user_metadata

function (user, context, callback) {
    var count = context.stats && context.stats.loginsCount ? context.stats.loginsCount : 0;
    if (count > 1) {
        return callback(null, user, context);
    }

    //update metadata 
    // https://auth0.com/docs/rules/guides/metadata#update-user_metadata


    callback(null, user, context);
}