[英]Meteor cookies and Server side routes
看来在Meteor中,如果没有常规工作流中的身份验证方面的某种变通方法,我们就无法调用服务器端路由来将文件呈现到页面。
我使用的是最新的Iron Router 1. *和Meteor 1. *,首先,我使用的是Accounts-password。
我有一个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'}
);
}
在同一个文件both / 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技术
然后将以下代码添加到我的项目中:client / 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:使用cookie时,如何正确设置/获取和检查cookie? 问题2:使用cookie方法应采取哪些预防措施?
补充问题:Cookies是解决此问题的最佳方法,还是有一种更简单的方法来实现相同目的?
您可以调用一个生成临时访问令牌的方法,当您从服务器获得肯定答复(意味着该令牌已创建)时,可以在加载PDF之前检查此令牌的有效性。
至于使用cookie:与调用方法,等待然后重定向/打开新选项卡相比,它可能更方便。 我使用W3C客户端javascript函数测试了您的代码,并且该代码在客户端起作用。 函数getCookie
假定您是客户端,而不是服务器。 您需要检查请求并提取cookie。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.