2015-10-25 28 views
1

我目前個人資料頁上使用插件「賬戶密碼」的工作通過更新MeteorJS賬戶,密碼插件

meteor add accounts-password 

我已經運行程序等命令安裝它,並能夠添加數據;然而,當我嘗試打電話或使用顯示在瀏覽器上的數據

{{ currentUser.email }} 

{{ currentUser.password }} 

它不顯示,但是當我打電話

{{ currentUser.username }} 

它的工作原理正好。我試圖通過find()訪問數據庫。這就是我所看到的。根據安排

id: "GP26SF2F8jmpqQuvT" 
emails: Array[1] 
     0: Object 
     address: "[email protected]" 
     verified: false 
     __proto__: Object 
     length: 1 
__proto__: Array[0] 
username: "testing" 
__proto__: Object 

,我應該叫電子郵件作爲

{{ currentUser.emails.0.address }} 

?另外我沒有看到數據中的密碼,有沒有辦法檢索它?其實我的目的是在這裏更新Meteor.users,如果用戶想更改密碼或電子郵件地址。謝謝。

回答

2

accounts-password默認情況下不會發布文檔的password字段。這是可以預料的 - 出於安全原因!

關於電子郵件:accounts包允許應用程序添加多個電子郵件給用戶。這就是爲什麼有一組電子郵件。

而不是做

{{ currentUser.emails.0.address }} 

你可以做的是一個輔助添加到模板:

Template.myTemplate.helpers({ 
    email: function(){ 
     return Meteor.user().emails[0].address; 
    } 
}); 

然後你可以使用這個模板:

{{ email }} 

其實我這裏的目的是更新Meteor.users,如果用戶想要更改密碼或電子郵件地址。謝謝。

我想說幾乎沒有理由將用戶密碼發佈到客戶端。這是一個巨大的安全風險。 accounts-password包已經處理了常見的使用案例,因此您可以在客戶端上使用Accounts.changePassword()以允許用戶更改其密碼。

如果您想允許用戶更改他們的電子郵件,您想要做的是使用Method。一個方法可以被客戶端調用,但代碼在服務器上執行。執行完成後,服務器會向客戶端返回響應。有點像HTTP的工作原理。

在這種情況下,客戶端可能會調用名爲changeEmail的方法,該方法會嘗試更改用戶的電子郵件。如果所有檢查都通過了,服務器將更改用戶的電子郵件並返回響應,例如, "success",否則返回"fail"。這是代碼可能是什麼樣子:

if(Meteor.isClient){ 
    Meteor.call('changeEmail', newEmail, function(error, response){ 
     if(error){ 
      console.error(error); 
     } else { 
      console.log(response); 
     } 
    }); 
} 

if(Meteor.isServer){ 
    Meteor.methods({ 
     changeEmail: function(newEmail){ 
      Accounts.addEmail(this.userId, newEmail, false); 
      var userEmails = Meteor.users.findOne(this.userId, {fields: {emails: 1}}).emails; 
      if(userEmails.length > 1){ 
       Accounts.removeEmail(this.userId, userEmails[0].address); 
       Accounts.sendVerificationEmail(this.userId, newEmail); 
       return "success"; 
      } else { 
       throw new Meteor.Error('fail', 'email not correct!'); 
      } 
     } 
    }); 
} 

如果你不熟悉的方法,就可以讀取流星要麼this教程或this文章。此外,我的代碼可能不是100%的功能,它只是一個例子。

+0

非常感謝你的建議,我一定會閱讀它。 。關於顯示電子郵件,當我這樣做時: {{currentUser.emails.0.address}} 它給出了一個錯誤 – Neil

+0

@neil你可以做的是添加一個輔助模板。例如''Template.myTemplate.helpers({{email}}''''然後你就可以做'{{}}'''''Template.myTemplate.helpers({ – Oskar

+0

驚人! :) 有效。非常感謝。 – Neil