2015-02-06 143 views
0

我正在尝试为用户设置电子邮件验证。我使用useraccounts:coreenforceEmailVerification和我的服务器流星用户帐户电子邮件验证

Accounts.onCreateUser(function(options, user) { 
    var userId = user._id; 
    Accounts.sendVerificationEmail(userId); 

    if(options.profile.invite){ 
    Invites.remove({_id: options.profile.invite}); 
    } 

    user.profile = options.profile 

    return user; 
}); 

上,我有以下当我尝试注册一个用户,我得到以下服务器错误

I20150206-18:12:08.648(-5)? Exception while invoking method 'ATCreateUserServer' Error: Can't find user 
I20150206-18:12:08.648(-5)?  at Object.Accounts.sendVerificationEmail (packages/accounts-password/password_server.js:562:1) 
I20150206-18:12:08.648(-5)?  at Meteor.methods.deleteAccount.userId (app/server/accountsMeld.js:12:12) 
I20150206-18:12:08.648(-5)?  at Object.Accounts.insertUserDoc (packages/accounts-base/accounts_server.js:1024:1) 
I20150206-18:12:08.649(-5)?  at createUser (packages/accounts-password/password_server.js:693:1) 
I20150206-18:12:08.649(-5)?  at Object.Accounts.createUser (packages/accounts-password/password_server.js:751:1) 
I20150206-18:12:08.649(-5)?  at [object Object].Meteor.methods.ATCreateUserServer (packages/useraccounts:core/lib/methods.js:66:1) 
I20150206-18:12:08.649(-5)?  at [object Object].methodMap.(anonymous function) (packages/meteorhacks:kadira/lib/hijack/wrap_session.js:182:1) 
I20150206-18:12:08.649(-5)?  at maybeAuditArgumentChecks (packages/ddp/livedata_server.js:1599:1) 
I20150206-18:12:08.649(-5)?  at packages/ddp/livedata_server.js:648:1 
I20150206-18:12:08.649(-5)?  at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1) 

回答

2

我碰到这个问题也来了并根据此:https://github.com/alanning/meteor-roles/issues/35#issuecomment-40674250,

因为用户还没有“存在”,所以将Accounts.sendVerificationEmail(userId);放在Accounts.onCreateUser之内并不是一个好主意。

如果你使用,你可以返回,当用户在创建用户ID的方法,那么以后发送电子邮件,就像这样:

var userID = Accounts.createUser(options, callback); 
Accounts.sendVerificationEmail(userID); 
+0

唉,我也得到一个错误,因为createuser还没有回调。 – corvid 2015-03-10 16:06:58

+0

@corvid回调函数是你自己定义的一个函数,虽然你不必在那里有一个函数。 – reoh 2015-03-11 00:46:57

1

你需要把里面sendVerificationEmail和Accounts.createUser设置timeout

Accounts.onCreateUser(function(options, user) { 

// we wait for Meteor to create the user before sending an email 
Meteor.setTimeout(function() { 
    Accounts.sendVerificationEmail(user._id); 
}, 2 * 1000); 

return user; 
});