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

Javascript Meteor:在服务器上将电子邮件地址转换为MD5hash,并在客户端进行访问,javascript,meteor,server,gravatar,Javascript,Meteor,Server,Gravatar,所以我想在我的网站上使用Gravatar头像。我有合适的包装。按照它的工作方式,它将电子邮件地址转换为“MD5Hash”,然后发送到Gravatar以交换图像url 很好,但我想在不暴露每个人电子邮件地址的情况下显示头像。同时,我有一些用户可能已经有了墓碑,我认为如果他们的头像有一天突然出现,而不向用户档案集合添加另一个字段,或者要求他们这样做,那就太酷了 有没有一种方法可以在服务器上执行这些操作并实现我的目标 Handlebars.registerHelper("gravatar", func

所以我想在我的网站上使用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
都将为您提供一个对象数组,这些对象的
\u id
与每个用户的
\u id
匹配,并且其
md5hash
值是该用户电子邮件的哈希值。您可以设置一个方法,以便在需要时将此数组返回给您

好消息是,您的客户可以使用这些散列在任何时候获得任何大小的化身可能是必要的

少了很多黑客:


上面提到的问题是,您的服务器经常会重新计算每封电子邮件的md5hash。此外,您还可以从服务器获得一个潜在的大型非反应性阵列。你会后悔的。您只需要在用户文档中的
emails
数组中添加一个
md5hash
键,为现有用户初始化它,并确保新用户在创建时始终设置此键。这将允许您处理单个电子邮件地址用户或多个电子邮件地址用户。

感谢您为我提供了所需内容并告诉我不要这样做。我甚至不打算测试它,因为我在你答案的第二部分看到了原因。问题是。。。我的数据在大多数地方并没有真正标准化,所以看起来我还必须将该散列复制到每个用户评论中,等等(以及userId和username)。那很好。。。除非你也看到了不这样做的理由。如果你正在为帖子集合引用的用户发布信息,那么你可以很容易地拥有一个模板助手,为你获取帖子中用户的化身。在minimongo中,对于合理数量的用户来说,这种简单的查找应该非常快速。这是我还没有尝试过的。在这些情况下,我只是复制了这些信息。是的,是因为懒惰,但无论如何都要快一些,对吧?蒙戈如是说。我不希望用户抱怨希望旧内容反映他们的个人资料变化。到目前为止,我只有70个左右的用户,每个人都有少量的内容。而且,似乎很难与无限滚动相结合。gravatar的好处是,即使用户更改了他们的电子邮件地址,他们的图片与以前的电子邮件地址的关联也会一直存在。这将使您的非规范化方法足够好。它很可能有无限滚动,并且只根据需要从订阅加载数据-请参阅该软件包对您也应该很有用。