流星cookie和服务器端路由

时间:2015-01-01 17:17:36

标签: javascript node.js cookies meteor iron-router

似乎在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'});

添加了Cookie相关代码

我找到了一个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是最好的解决方法,还是有一个   更简单的方法来实现同样的目标?

1 个答案:

答案 0 :(得分:1)

您可以调用生成临时访问令牌的方法,当您从服务器获得肯定答案时(意味着创建了令牌),您可以在加载PDF之前检查此令牌的有效性。

至于使用cookie:与调用方法,等待然后重定向/打开新选项卡相比,它可能更方便。我使用W3C客户端javascript函数测试了您的代码,并且它在客户端工作。函数getCookie假设您是客户端,而不是服务器。您需要检查请求并提取cookie。

相关问题