我的 Meteor.js 应用程序应该包含密码保护功能。注册用户可以为Collection中的某个对象设置密码,公共(public)用户需要使用该密码进行身份验证才能访问该对象模板。
我想知道最好的方法是什么?
到目前为止的想法:
--生成唯一的身份验证 token 并将其保存到客户端的 Session 对象中。在客户端上使用此 token 来确定是否应显示密码表单而不是实际的对象模板
--原始密码仅在服务器端可用,并经过适当的加盐和胡椒粉处理
问题:
--我需要一个服务器端 API,客户端可以在其中查询用户尝试访问的当前对象的密码。在 Meteor 中如何做到这一点?
--定义每个对象的密码并将其与对象一起存储。这确实令人困惑 - 密码需要发送到服务器,而不是存储在客户端,然后加盐并与 protected 对象一起存储在服务器上。
最佳答案
最好的办法是
在客户端上有一个可见的模板(原始 HTML,但没有任何敏感数据),例如,如果它是私有(private)区域,可能会链接到下载或有关帐户的数据。
第二种是使用作用域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
集合中的内容。“私有(private)部分”仅在您登录时才可见。如果黑客试图阅读它,但他们仍然无法访问下载链接,因为服务器在用户登录之前不会发布它们。
关于Meteor.js - 使用密码保护模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19932983/