Каков наилучший способ (наиболее безопасный и простой) для аутентификации пользователя для маршрута на стороне сервера?
Программное обеспечение/Версии
Я использую новейший Iron Router 1. * и Meteor 1. *, и для начала я просто использую пароль для учетных записей.
Код ссылки
У меня есть простой серверный маршрут, который отображает PDF на экран:
оба/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'});
В качестве примера я хотел бы сделать что-то близкое к тому, что этот ответ SO предложил:
На сервере:
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');
});
}
});
Но даже если я каким-то образом обработаю этот метод, я все равно буду уязвим для пользователей, просто добавив URL-адрес, например '/pdf-server', если только сам маршрут не проверил право на сборку Secrets?
В маршруте я могу получить запрос и каким-то образом получить информацию о заголовке?
Router.route('/pdf-server', function() {
var req = this.request;
var res = this.response;
}, {where: 'server'});
И от клиента передайте токен по HTTP-заголовку, а затем в маршруте проверьте, хорош ли токен из коллекции?