我的Meteor.js应用程序假设包含密码保护功能。注册用户可以为Collection中的某个对象设置密码,然后公共用户应使用此密码进行身份验证以访问对象模板。
我想知道什么是最好的方法?
到目前为止的想法:
- 生成唯一的身份验证令牌并将其保存到客户端的Session对象。在客户端上使用此标记来标识是否应显示密码表单而不是实际的对象模板
- 原始密码仅在服务器端可用,并且已正确加盐和加盖
问题:
- 我需要一个服务器端API,客户端可以在其中查询用户尝试访问的当前对象的密码。你如何在流星中做到这一点?
- 为每个对象定义密码并将其与对象一起存储。这确实令人困惑 - 密码需要发送到服务器,而不是存储在客户端,然后在受保护对象上加盐并存储在服务器上。
答案 0 :(得分: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-ui
和accounts-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
集合中的内容。只有在您登录后,“私有部分”才会显示。如果黑客试图阅读它仍然无法访问下载链接,因为在用户登录之前服务器不会发布它们。