我让用户上传他们的图片,如果没有,则使用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缩小到此用户结构更改。任何人都可以向我解释为什么会这样吗?
答案 0 :(得分:1)
首先you shouldn't use profile。出于安全原因,用户文档的其余部分不可写。因此,不在简档字段中的任何内容都不会被写入。
将个人资料视为您可以完全控制的单独个人资料集合,例如socialize。