2016-01-21 72 views
4

我使用Meteor啓動函數在服務器上創建默認用戶。我想創建一個用戶並在啓動時驗證他/她的電子郵件(我假設你只能在創建帳戶後執行此操作)。如何在Meteor創建用戶時獲取用戶ID?

這是我有:

Meteor.startup(function() { 
    // Creates default accounts if there no user accounts 
    if(!Meteor.users.find().count()) { 
    // Set default account details here 
    var barry = { 
     username: 'barrydoyle18', 
     password: '123456', 
     email: '[email protected]', 
     profile: { 
     firstName: 'Barry', 
     lastName: 'Doyle' 
     }, 
     roles: ['webmaster', 'admin'] 
    }; 

    // Create default account details here 
    Accounts.createUser(barry); 

    Meteor.users.update(<user Id goes here>, {$set: {"emails.0.verified": true}}); 
    } 
}); 

正如我所說的,我認爲,用戶必須要設置的驗證標誌爲真(如果這種說法是錯誤的請出示的解決方案,以使前第一次創建在創建用戶時標誌爲真)。

爲了將電子郵件驗證標誌設置爲true,我知道我可以在創建後使用Meteor.users.update(userId, {$set: {"emails.0.verified": true}});更新用戶。

我的問題是,我不知道如何獲得我新創建的用戶的用戶ID,我該怎麼做?

回答

6

您應該能夠訪問從Accounts.createUser()函數返回的用戶ID:通過Accounts.onCreateUser()函數

var userId = Accounts.createUser(barry); 
Meteor.users.update(userId, { 
    $set: { "emails.0.verified": true} 
}); 

或者你可以訪問新創建的用戶:

var barry = { 
    username: 'barrydoyle18', 
    password: '123456', 
    email: '[email protected]', 
    profile: { 
    firstName: 'Barry', 
    lastName: 'Doyle' 
    }, 
    isDefault: true, //Add this field to notify the onCreateUser callback that this is default 
    roles: ['webmaster', 'admin'] 
}; 

Accounts.onCreateUser(function(options, user) { 
    if (user.isDefault) { 
     Meteor.users.update(user._id, { 
      $set: { "emails.0.verified": true} 
     }); 
    } 
}); 
+0

替代選項會運行,但已驗證標誌仍然爲false。我應該在'createUsers'函數之前還是之後運行'onCreateUser'函數?目前我正在運行它。 –

+1

第二種解決方案是簡單地爲創建帳戶時註冊一個回叫。通過在其中放置一個console.log()來驗證它是否按預期運行。該回調中的代碼應該在創建新帳戶時運行,而不僅僅是在這個單一實例中。至於第一個解決方案,我修改它不包括回調。 –

+1

你的新的第一個解決方案做到了!感謝您的時間 :) –