meteor - createuser validation error on method with aldeed collection2 -
folks,
i need help. i've been @ sometime , cant seem figure out. should simple. i'm using aldeed collection2 , cant seem past validation error being thrown create user account method. schema pretty standard, attached meteor.users collection:
schema={} //simpleschema.debug = true; schema.userprofile = new simpleschema({ picture: { type: string, optional: true }, updatedat: { type: date, autovalue: function() { if (this.isupdate) { return new date(); } }, denyinsert: true, optional: true }, roles: { type: string, optional: true } }); schema.user = new simpleschema({ _id: { type: string, regex: simpleschema.regex.id, optional: true, denyupdate: true }, emails: { type: [object], optional: true }, "emails.$.address": { type: string, regex: simpleschema.regex.email, label: "" }, "emails.$.verified": { type: boolean, optional: true }, createdat: { optional: true, type: date, autovalue: function() { if (this.isinsert) { return new date; } else if (this.isupsert) { return {$setoninsert: new date}; } else { this.unset(); } } }, profile: { type: schema.userprofile, optional: true }, services: { type: object, optional: true, blackbox: true }, // option 2: [string] type // if sure never need use role groups, // can specify [string] type roles: { type: [string], optional: true, autovalue: function() { if (this.isinsert) { return ['user']; } else if (this.isupsert) { return {$setoninsert: ['user']}; } else { this.unset(); } } }, password: { type: string, label: "password", min: 6 } }); /* attach schema meteor.users collection */ meteor.users.attachschema(schema.user);
the method on server creating user below:
accounts.config({ forbidclientaccountcreation : true }); //creates user on server meteor.methods({ createnewuseraccount: function(userdata) { var userid; check(userdata, schema.user); //console.log(userdata); userid = accounts.createuser({ email: userdata.emails[0].address, password: userdata.password, profile: userdata.profile }); //console.log(userid); return userid; } }); accounts.oncreateuser(function(options, userdata) { //user.profile = {}; // wait meteor create user before sending email //need address exception when existing email tried signing meteor.settimeout(function () { accounts.sendverificationemail(userdata._id); }, 2 * 1000); return userdata; });
for client, have following signup.js
template.signup.events({ 'submit form': function(e){ // prevent form submitting. e.preventdefault(); //console.log(doc); user = { 'email.$.address': $('[name="emails.0.address"]').val(), password: $('[name="password"]').val() }; meteor.call('createnewuseraccount', user, function(error) { if (error) { return alert(error.reason); } else { router.go('/'); } }); }
does know i'm doing wrong? schema not validate email address.i error: email.0.address not allowed schema
you're creating object:
user = { 'email.$.address': $('[name="emails.0.address"]').val(), password: $('[name="password"]').val() };
the key literal string 'email.$.address'
so when do:
userid = accounts.createuser({ email: userdata.emails[0].address, password: userdata.password, profile: userdata.profile });
the email
key can't find userdata.emails[0]
because there no emails
key. instead, key 'email.$.address'
. also, schema not have key called email.$.address
. has 1 called emails.$.address
try:
template.signup.events({ 'submit form': function(e){ // prevent form submitting. e.preventdefault(); //console.log(doc); user = { 'emails.$.address': $('[name="emails.0.address"]').val(), password: $('[name="password"]').val() }; meteor.call('createnewuseraccount', user, function(error) { if (error) { return alert(error.reason); } else { router.go('/'); } }); }
then
//creates user on server meteor.methods({ createnewuseraccount: function(userdata) { var userid; check(userdata, schema.user); //console.log(userdata); userid = accounts.createuser({ email: userdata['emails.$.address'], password: userdata.password, profile: userdata.profile }); //console.log(userid); return userid; } });
Comments
Post a Comment