Meteor,更改用户配置文件结构会导致丢失gravatar并且没有console.log错误

时间:2017-05-13 11:11:23

标签: javascript meteor gravatar

我让用户上传他们的图片,如果没有,则使用gravatar。

在原计划中,一切正常。当没有上传图片时显示Gravatar图像。我在个人资料字段profilepicId下保存了上传的图片网址(cloudinary)。

发布

Meteor.publish('allUsers', function() {
    return Meteor.users.find( {}, { 
        fields: { username: 1, profileImg: 1, emails: 1, md5hash: 1, profile: 1 }
    });
});

以下是用户结构(原始工作代码):

username,
emails,
password,
profile : { profilepicId: {} }

注册新用户(原始工作代码):

Accounts.createUser({         //thats all I can add based on docs
   username  : usernameVar,
   email     : emailVar,
   password  : passwordVar,
   profile   : { }

//and then to extend the user fields
Accounts.onCreateUser(function(options, user) { 
   if(options.profile) {
      user.profile = options.profile || {};
   }
   user.md5hash = Gravatar.hash(user.emails[0].address); 
   return user;
});

然后在html中显示图片:

{{#if profile.profilepicId}} 
   <a href="{{pathFor 'upload'}}" class="link">
      <img src="{{c.url profile.profilepicId format=format gravity='faces' mode='thumb' crop='thumb' width=60 height=60}}">
   </a>
{{else}} 
   <!-- the uploaded image --> 
{{/if}}




和变化.... 现在,我不是将上传的图片保存在profile: { profilepicId : {}}中,而是将其保存在profile字段之外。我没有删除Meteor用户结构中的默认配置文件。

username,
emails,
password,
profileImg :{ social : {} , uploaded: {}}

更改会反映在Accounts.OnCreateUser中:

Accounts.onCreateUser(function(options, user) { 
   user.profileImg = { social : {}, uploaded: {} }
   user.md5hash = Gravatar.hash(user.emails[0].address); 
   return user;
}); 

上传的图片的html也会从profile.profilepicId更改为profileImg.uploaded。然而,这并不重要,因为没有显示的gravatar,不需要上传html的行。

这就是我所做的所有改变。没有更改也要发布。控制台日志中没有错误消息,我将丢失的gravatar缩小到此用户结构更改。任何人都可以向我解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

首先you shouldn't use profile。出于安全原因,用户文档的其余部分不可写。因此,不在简档字段中的任何内容都不会被写入。

将个人资料视为您可以完全控制的单独个人资料集合,例如socialize