似乎在Meteor中,我们无法调用服务器端路由将文件呈现到页面,而无需在身份验证方面对我们的常规工作流进行某种处理。
我正在使用最新的Iron Router 1. *和Meteor 1. *并且开始,我只是使用帐户密码。
我有一个onBeforeAction,根据用户是否登录,只需将用户重定向到欢迎页面或主页:
两者/ routes.js
if (Meteor.isClient) {
Router.onBeforeAction(function () {
if (!Meteor.user() || Meteor.loggingIn())
this.redirect('welcome.view');
else
this.next();
}
,{except: 'welcome.view'}
);
Router.onBeforeAction(function () {
if (Meteor.user())
this.redirect('home.view');
else
this.next();
}
,{only: 'welcome.view'}
);
}
在同一个文件中,两个/ routes.js,我都有一个简单的服务器端路由,可以将pdf呈现给屏幕:
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答案,其中列出了设置和获取Cookie的方法:SO Cookies technique
然后将以下代码添加到我的项目中: 客户机/ main.js
Deps.autorun(function() {
if(Accounts.loginServicesConfigured() && Meteor.userId()) {
setCookie("meteor_userid",Meteor.userId(),30);
setCookie("meteor_logintoken",localStorage.getItem("Meteor.loginToken"),30);
}
});
但是这不能按预期工作,因为某些原因,setCookie代码无效。
问题1:使用cookies,如何正确设置/获取和检查cookie? 问题2:我应该采用cookies方法采取哪些预防措施?
方面问题:Cookie是最好的解决方法,还是有一个 更简单的方法来实现同样的目标?
答案 0 :(得分:1)
您可以调用生成临时访问令牌的方法,当您从服务器获得肯定答案时(意味着创建了令牌),您可以在加载PDF之前检查此令牌的有效性。
至于使用cookie:与调用方法,等待然后重定向/打开新选项卡相比,它可能更方便。我使用W3C客户端javascript函数测试了您的代码,并且它在客户端工作。函数getCookie
假设您是客户端,而不是服务器。您需要检查请求并提取cookie。