所以我想在我的网站上使用 Gravatar 头像。我得到了合适的包。它的工作方式是将电子邮件地址转换为“MD5Hash”。它将发送到 Gravatar 以换取图像网址。
好吧,但我想在不暴露每个人的电子邮件地址的情况下显示头像。与此同时,我的用户可能已经拥有了头像,我认为如果有一天他们的头像突然出现,而不需要向用户个人资料集合添加另一个字段或要求他们这样做,那就太酷了。
有没有办法在服务器上完成一些操作并实现我的目标?
Handlebars.registerHelper("gravatar", function(id){
var email = Meteor.users.findOne({_id: id}).emails[0].address;
var options = {
secure: true,
size: 29,
default: 'retro'
};
var md5Hash = Gravatar.hash(email);
// 5658ffccee7f0ebfda2b226238b1eb6e
var url = Gravatar.imageUrl(md5Hash, options);
// https://secure.gravatar.com/avatar/5658ffccee7f0ebfda2b226238b1eb6e
return url;
});
最佳答案
黑客:
在服务器上:
userArray = Meteor.users.find(query,{fields: {"emails.address": 1}}).fetch();
userArray.forEach(function(el,i,a){
a[i] = { _id: el._id, md5hash: Gravatar.hash(el.emails[0].address) };
}
其中 query
是您的条件,将为您提供 _id
与 _id
匹配的对象的数组> 每个用户的 md5hash
值是该用户电子邮件的哈希值。您可以设置一个方法,在需要时将这个数组返回给您。
好消息是,您的客户可以使用这些哈希值随时获取所需大小的头像。
少一点黑客行为:
上述问题是您的服务器经常会重新计算每封电子邮件的 md5hash。另外,您将从服务器获得一个可能很大且非 react 性的数组。你会为此而后悔的。您实际上只想将 md5hash
键添加到用户文档中的 emails
数组中,为现有用户初始化它,并确保新用户始终将此键设置为创建时间。这将允许您处理单个电子邮件地址用户或多电子邮件地址用户。
关于javascript - Meteor:在服务器上将电子邮件地址转换为MD5hash,并在客户端上访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31282253/