2

我的 Meteor.js 应用程序应该包含密码保护功能。注册用户可以为 Collection 中的某个对象设置一个密码,然后公共用户应该使用该密码进行身份验证才能访问该对象模板。

我想知道最好的方法是什么?

到目前为止的想法:

--生成唯一的auth token,保存到客户端的Session对象中。在客户端上使用此令牌来确定是否应显示密码表单而不是实际的对象模板

--原始密码仅在服务器端可用,并在服务器端适当地加了盐和胡椒

问题:

--我需要一个服务器端 API,客户端可以在其中查询用户尝试访问的当前对象的密码。你如何在 Meteor 中做到这一点?

--定义每个对象的密码并将其与对象一起存储。这真的很令人困惑 - 密码需要发送到服务器,而不是存储在客户端上,然后加盐并与受保护的对象一起存储在服务器上。

4

1 回答 1

3

最好的办法是

在客户端上有一个可见的模板(原始 HTML,但没有任何敏感数据),例如,如果它是私人区域,则可能链接到下载或与帐户有关的数据。

第二种是使用作用域Meteor.publish函数。因此,您将(假设下载链接)存储在服务器上的集合中,然后以如下方式发布它:

服务器端js:

var DownloadLinks = new Meteor.Collection("downloads");

Meteor.publish("collection", function() {
    //Only a logged in user will get the data
    if(this.userId) return DownloadLinks
});

您的客户端:

您可以安装一个包,例如accounts-uiaccounts-password快速开始

你的 HTML

<!-- Buttons to log in -->
{{loginButtons}}

{{#if currentUser}}
    <h1>Private Section</h1> - <p>Only visible if you're logged in</p>
{{/if}}

你的客户端js

DownloadLinks = new Meteor.Collection("downloads");

Meteor.subscribe("collection");

因此,在这里,用户只有在登录后才能访问DownloadLinks集合中的内容。“私人部分”只有在您登录时才可见。如果黑客试图阅读它,他们仍然无法访问下载链接,因为在用户登录之前服务器不会发布它们。

于 2013-11-12T20:44:54.167 回答