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

时间:2015-07-08 01:52:11

标签: javascript meteor server gravatar

所以我想在我的网站上使用Gravatar头像。我得到了适当的包。它的工作方式,它将电子邮件地址转换为" MD5Hash。"这已被发送到Gravatar以换取图片网址。

很好,但我希望在不暴露所有人的电子邮件地址的情况下显示头像。与此同时,我已经有可能已经拥有gravatars的用户了,我认为如果他们的头像有一天刚出现,而不向用户个人资料集添加另一个字段,或者要求他们,那将会很酷。

有没有办法在服务器上执行此操作并实现目标?

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;
});

1 个答案:

答案 0 :(得分:1)

<强>的hackish:

在服务器上:

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 value是该用户电子邮件的哈希值。您可以设置一种方法,以便在需要时将此数组返回给您。

好消息是,您的客户可以使用这些哈希来获取任何时候可能需要的任何大小的头像。

少得多的hackish

上述问题是您的服务器经常会重新计算每封电子邮件的md5hash。此外,您还从服务器获取了一个可能很大且无反应的阵列。你会活着后悔这件事。您真的只想在用户文档中向md5hash数组添加emails密钥,为现有用户初始化它,并确保新用户在创建时始终拥有此密钥集。这将允许您处理单个电子邮件地址用户或多个电子邮件地址用户。