【发布时间】:2015-02-28 07:26:09
【问题描述】:
对服务器端路由的用户进行身份验证的最佳方式(最安全和最简单)是什么?
软件/版本
我正在使用最新的 Iron Router 1.* 和 Meteor 1.* 开始,我只使用帐户密码。
参考代码
我有一个简单的服务器端路由,可以将 pdf 呈现到屏幕上:
both/routes.js
Router.route('/pdf-server', function() {
var filePath = process.env.PWD + "/server/.files/users/test.pdf";
console.log(filePath);
var fs = Npm.require('fs');
var data = fs.readFileSync(filePath);
this.response.write(data);
this.response.end();
}, {where: 'server'});
举个例子,我想做一些接近this SO answer suggested的事情:
在服务器上:
var Secrets = new Meteor.Collection("secrets");
Meteor.methods({
getSecretKey: function () {
if (!this.userId)
// check if the user has privileges
throw Meteor.Error(403);
return Secrets.insert({_id: Random.id(), user: this.userId});
},
});
然后在客户端代码中:
testController.events({
'click button[name=get-pdf]': function () {
Meteor.call("getSecretKey", function (error, response) {
if (error) throw error;
if (response)
Router.go('/pdf-server');
});
}
});
但即使我以某种方式使这种方法起作用,我仍然容易受到用户只是输入像“/pdf-server”这样的 URL 的攻击,除非路由本身以某种方式检查了 Secrets 集合对吗?
在Route中,我可以获取请求,并以某种方式获取header信息?
Router.route('/pdf-server', function() {
var req = this.request;
var res = this.response;
}, {where: 'server'});
并从客户端通过 HTTP 标头传递一个令牌,然后在路由中检查该令牌是否来自 Collection?
【问题讨论】:
标签: node.js authentication meteor routing iron-router