确定cookie何时将与节点请求模块一起到期

时间:2016-12-29 13:45:55

标签: node.js session express cookies

我正在编写一个通过抓取外部域来构建API的应用程序。为了刮取域名,我的服务器必须经过授权(使用会话cookie)。

我正在使用带有cookie jar的request module来维护请求中的cookie。

我想设置一些Node路由器中间件,这样,如果/当会话到期时,我可以重新运行我的身份验证方法。想想这样的事情:

export function validate(req, res, next) {
    const cookie = cookieJar.getCookie('**target domain**');
    const COOKIE_IS_EXPIRED = // ???
    if ( COOKIE_IS_EXPIRED ) {
        authenticate().then(next);
    } else {
        next();
    }
}

当我退出cookieJar.getCookies()的内容时,我的结果如下:

[ Cookie="lw_opac_1=1483019929431275955; Expires=Wed, 29 Mar 2017 13:58:49 GMT; Max-Age=7776000; Path=/opac; hostOnly=true; aAge=0ms; cAge=6345ms",
  Cookie="lw_opac=ta4tscsejs6c94ngikt7hlbcn0; Path=/; hostOnly=true; aAge=0ms; cAge=6347ms" ]

如何验证两个cookie何时接近/已过期,然后重新运行我的auth功能?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用npm中的cookie模块来解析cookie。

所以,例如当你有一个像你发布的字符串时:

var c = "lw_opac_1=1483019929431275955; Expires=Wed, 29 Mar 2017 13:58:49 GMT; Max-Age=7776000; Path=/opac; hostOnly=true; aAge=0ms; cAge=6345ms";

然后运行:

console.log(cookie.parse(c));

将导致打印:

{ lw_opac_1: '1483019929431275955',
  Expires: 'Wed, 29 Mar 2017 13:58:49 GMT',
  'Max-Age': '7776000',
  Path: '/opac',
  hostOnly: 'true',
  aAge: '0ms',
  cAge: '6345ms' }

您可以使用Max-AgeExpires字段,并使用moment对其进行解析,并将其与当前时间进行比较。

使用moment,您可以将给定日期与今天进行比较,并获得差异的小时数或天数。例如:

moment().isAfter(someDate);

会告诉您该日期是否已经过去(如果它已过期,那么它会告诉您该Cookie是否已过期)。

请参阅:

答案 1 :(得分:0)

@rsp回答正确。但是,如果要维护访问安全性令牌,则应继续使用csrf令牌,该令牌会自动维护客户端cookie并为新会话生成令牌。有关详细信息http://www.senchalabs.org/connect/csrf.html