我正在使用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对象的注册方法会返回此错误?
感谢。
答案 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类型。
答案 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);
}