繁体   English   中英

流星Cookie和服务器端路由

[英]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'});

添加了与Cookie相关的代码

我找到了一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM