2016-12-29 54 views
0

我正在编写一个应用程序,通过刮取外部域来构建API。为了刮去域名,我的服务器必须被授权(使用会话cookie)。确定cookie何时会与节点请求模块过期

我正在使用request module和cookie jar来维护跨请求的cookie。

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

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" ] 

我如何可以验证时,这两个饼干接近/已过期,然后重新运行我的身份验证功能?

谢谢!

+0

Did [my post](https://stackoverflow.com/questions/41380997/determine-when-cookie-will-expire-with-node-request-module/41381820#41381820)回答你的问题? – rsp

回答

0

您可以使用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已过期)。

参见:

+0

谢谢!这并没有完全回答我的问题,但让我想到了一个可以解决问题的点。干杯! :-) – Prefix

0

@rsp回答正确。但是,如果您要维护访问安全令牌,则应该移动自动维护客户端cookie并为新会话生成令牌的csrf令牌。更多细节http://www.senchalabs.org/connect/csrf.html

+0

感谢您的提示。幸运的是,这不是真正的帐户安全相关 - 我只需要维护与服务器的会话,而不是凭据。 – Prefix