2016-10-16 48 views
3

我無法弄清楚如何從Accounts.sendEnrollmentEmail函數獲取註冊令牌。Meteor.js - 獲取/獲取註冊令牌(來自Accounts.sendEnrollmentEmail)

我知道這個函數發送直郵朝這到底看起來像這樣的用戶:

http://localhost:3000/#/enroll-account/FCXzBbqHInZgBlLaOpu8Iv11jP9DJEG-e1auAHDsh6S

不過,我只需要以某種方式得到令牌的部分FCXzBbqHInZgBlLaOpu8Iv11jP9DJEG,e1auAHDsh6S作爲我想通過不同的服務發送登記郵件(例如郵戳)

如何做到這一點?

回答

2

Accounts.sendEnrollmentEmail(userId, email)函數生成一個隨機令牌並將其保存在用戶的services.password.reset.token字段中。

生成該令牌的代碼是:

var token = Random.secret(); 
    var when = new Date(); 
    var tokenRecord = { 
    token: token, 
    email: email, 
    when: when 
    }; 
    Meteor.users.update(userId, {$set: { 
    "services.password.reset": tokenRecord 
    }}); 

(可以查看該函數的源代碼here)。

然後它使用Email包發送電子郵件給用戶。如果你想使用一個不同的服務來發送電子郵件,你基本上有兩個選擇:

  • 使用相同的約定自己(即,創建相同的記錄,並在自己的函數中使用自己的電子郵件服務)。
  • 使用現有功能,允許郵件發送失敗,然後查詢用戶文檔以獲取令牌並自行發送電子郵件。

兩者都不是特別好的選擇,但兩者都會暫時工作。我希望他們將這部分重構爲自己的功能。

請注意,帳戶包預計會發生一些變化,以發佈下一個Meteor版本。

順便說一句,這個功能非常類似於Accounts.sendResetPasswordEmail,您可能也希望覆蓋或創建自己的版本。

+0

哦,非常感謝一羣人向我澄清這一點!花了整個週末試圖讓我的頭靠近這個! – klanc

+1

很高興有幫助。沒有什麼比如查看源代碼和測試以更好地理解內部結構。 – MasterAM