Meteor.js - 使用密码保护模板

标签 meteor

我的 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-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 集合中的内容。“私有(private)部分”仅在您登录时才可见。如果黑客试图阅读它,但他们仍然无法访问下载链接,因为服务器在用户登录之前不会发布它们。

关于Meteor.js - 使用密码保护模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19932983/

相关文章:

javascript - meteor JS : Inconsistency with Meteor JS when dealing with cursors?

javascript - 为什么#each 标签不接受数组?

javascript - 关于更改 View 和将数组放入集合中的问题 Meteor

重新渲染模板时的 Meteor 回调

javascript - 以 Meteor JS 形式存储动态输入值

javascript - Meteor-Up 问题 Mup 部署

meteor - 如何重新加载当前的熨斗 :router route?

javascript - 调用函数而不传递参数meteor app

javascript - meteor Handlebars : value in array in {{#each}} block

meteor - 从 currentView 获取 jQuery 元素