2016-12-29 58 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