Meteor:在服务器上将邮件地址转换为MD5hash,并在客户端访问

Meteor: Turning email address into MD5hash on server, and accessing on client

所以我想在我的网站上使用 Gravatar 头像。我得到了合适的包裹。它的工作方式是将电子邮件地址转换为 "MD5Hash." 发送到 Gravatar 以换取图像 url。

很好,但我想在不暴露每个人的电子邮件地址的情况下显示头像。同时,我已经有用户可能已经有头像了,我认为如果有一天他们的头像突然出现,而不是在用户配置文件集合中添加另一个字段,或者要求他们这样做,那会很酷。

有没有办法在服务器上完成其中的一些工作并实现我的目标?

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 值是该用户电子邮件的哈希值。你可以设置一个方法在你需要的时候return这个数组给你

好消息是您的客户可以随时使用这些哈希值来获得任何大小的化身。

不那么骇人听闻了:

上面的问题是您的服务器经常会重新计算每封电子邮件的 md5hash。另外,您将从服务器获得一个可能很大且无反应的阵列。你会后悔的。您实际上只是想向用户文档中的 emails 数组添加一个 md5hash 键,为现有用户初始化它,并确保新用户在创建时始终设置此键。这将使您能够处理单个电子邮件地址用户或多个电子邮件地址用户。