2016-03-01 37 views
0

我一直在試圖將這些自定義添加到配置文件下的流星用戶帳戶系統,但它不是成功。我有一個模式形式,這是彈出來做到這一點,下面是我的事件代碼。流星:試圖添加自定義字段給用戶(),但它沒有成功

Template.profile.events({ 
'submit #saveBasicProfile': function(event, template) { 
    console.log("CLICK"); 
    event.preventDefault(); 
    var fullnameVar = event.target.fullname.value; 
    var titleVar = event.target.title.value; 
    var about_youVar = event.target.about_you.value; 
    Meteor.users.update({_id:Meteor.user()._id}, 
      { $set: 
       [{ "profile.fullname" : fullnameVar }, 
       { "profile.title"  : titleVar }, 
       { "profile.about_you" : about_youVar } ] 
      }); 

    //Router.go('/profile'); 
} 

});

+0

按照http://stackoverflow.com/questions/29012836/how-to-partly-update-meteor-users-profile –

+0

你有拒絕的任何地方規則關於用戶集合?配置文件是一種特殊情況,應由配置文件所有者直接從客戶端進行編輯,而不管您是否安裝了不安全的。 –

回答

0

很可能你會得到「訪問被拒絕」,因爲客戶端不允許編輯用戶集合。您可以添加允許更新的規則,但由於可能存在安全漏洞,因此不提示。

您可以在模板中調用服務器方法,並在服務器上處理更新操作。

-1

也許您嘗試更新的配置文件與要求的配置文件不同。因此,您可以爲用戶模型設置允許規則,使所有用戶都可以編輯配置文件字段。

類似的東西:

Users.allow({ 
// clients can modify the profile field of their own document, and 
// nothing else. 
update: function (userId, user, fields, modifier) { 
    // make sure it is our record 
    if (user._id == userId) 
     return true; 
    else 
     if(fields[0] === 'profile') 
      return true; 

    return false; 
} 
); 

但是,隨着檳榔說,這是一個安全漏洞,如果在生產中,你應該在服務器中創建一個方法,並從客戶端調用它。

+0

除非問題已被編輯,否則它應該始終嘗試更新當前用戶配置文件,因爲它正在使用'Meteor.user()._ id' –

+0

更新配置文件。他可以添加允許規則,如上所示。 。http://docs.meteor.com/#/full/allow –

+0

但它被稱爲{_id:Meteor.user()._ id}作爲查詢參數,所以它永遠不會是一個不同的Id,除非問題是不同的。更何況,這將允許任何操作在用戶對象的任何領域,只要你指定的第一個字段是配置文件,你可以做任何額外的操作,你想在任何領域的任何用戶... –

1

執行更新的方法:

Template.profile.events({ 
    'submit #saveBasicProfile': function(event, template) { 
     event.preventDefault(); 
     Meteor.call('update_profile', 
      event.target.fullname.value, 
      event.target.title.value, 
      event.target.about_you.value, 
      function(err) { 
       if (err) alert(err); 
       else Router.go('/profile'); 
      } 
     ); 
    }) 
}); 

if (Meteor.isServer) { 
    Meteor.methods({ 
     update_profile: function(fullname, title, about_you) { 
      check(fullname, String); 
      check(title, String); 
      check(about_you, String); 

      // ... further validation 

      Meteor.users.update(Meteor.userId(), { $set: { 
       'profile.fullname': fullname, 
       'profile.title': title, 
       'profile.about_you': about_you 
      }}); 
     }) 
    }); 
} 
+0

嘿@sba我試過了你的方法在這裏,但我從瀏覽器得到這個錯誤信息'錯誤:內部服務器錯誤[500]'。我錯過了什麼? – Duke

+0

我發現這個錯誤在我的控制檯'異常,同時模擬調用'update_profile'的效果TypeError:無法讀取未定義(...)的屬性'更新'TypeError:無法讀取未定義的屬性更新 – Duke

+0

嗯,我沒有運行代碼,所以很可能是有問題的。檢查服務器日誌。瀏覽器日誌中的錯誤似乎是因爲Meteor.user在客戶端上不可用。所以這應該通過限制它到服務器來避免。我已經更新了我的答案,所以該方法僅在服務器上定義,但仍未經過測試,因此服務器上的500仍將存在。 – sba

相關問題