Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为特定路由的hapi验证cookie设置ttl_Javascript_Node.js_Hapijs - Fatal编程技术网

Javascript 为特定路由的hapi验证cookie设置ttl

Javascript 为特定路由的hapi验证cookie设置ttl,javascript,node.js,hapijs,Javascript,Node.js,Hapijs,我正在尝试创建一个带有“记住我”复选框的用户登录页面。听起来很简单,对吧 当用户在未选中“记住我”复选框的情况下登录时,默认会话ttl将设置为10秒(10000毫秒)。但是,如果选中“记住我”复选框,则ttl将设置为100000秒(100000000毫秒) 跳过所有用户名和密码的身份验证,我设置了这个小演示来演示我的目标。不幸的是,会话ttl似乎总是10秒,而不是100000秒 下面是代码的粘贴箱: var Hapi=require('Hapi'); var AuthCookie=require

我正在尝试创建一个带有“记住我”复选框的用户登录页面。听起来很简单,对吧

当用户在未选中“记住我”复选框的情况下登录时,默认会话ttl将设置为10秒(10000毫秒)。但是,如果选中“记住我”复选框,则ttl将设置为100000秒(100000000毫秒)

跳过所有用户名和密码的身份验证,我设置了这个小演示来演示我的目标。不幸的是,会话ttl似乎总是10秒,而不是100000秒

下面是代码的粘贴箱:

var Hapi=require('Hapi');
var AuthCookie=require('hapi-auth-cookie');
var server=new Hapi.server('localhost',4000);//制作服务器
//此函数仅用于我的示例,稍后我将使用实际的记录器。。。
函数xhrlog(请求){
var auth=request.auth.isAuthenticated?“已验证”:“未验证”;
log(request.method.toUpperCase()+“request to”+request.path+“是”+auth+”);
}
//这是“/”路由的处理程序。您应该首先从这个路由开始(它代表登录页面)
函数firstLoad(请求、回复){
xhrlog(请求);
request.auth.session.set({});
回复(

单击要测试的按钮。

document.getElementById('foo')。addEventListener('click',function(){window.location='./newLocation'});”; } //这是我希望创建ttl为100000的会话cookie的页面。但事实并非如此。 授权功能(请求、回复){ xhrlog(请求); 回复(“

您可以在回复界面上设置不同的ttl值。此ttl值覆盖默认会话cookie的ttl

reply("test").state("session", session, {ttl: 365 * 30 * 7 * 24 * 60 * 60 * 1000});

如果有人发现自己在这里,答案似乎与当前版本的hapi auth cookie不同。我尝试使用接受的答案,但它不会改变特定于路线的ttl值

根据api文档:
request.cookieAuth.ttl(毫秒)
将覆盖默认策略设置。虽然没有明确的文档记录,但您也可以传递值
null
,并在浏览器中将cookie设置为Session。考虑到与原始海报类似的情况,我能够成功地覆盖ttl设置

但是,大多数现代浏览器最终都会保存cookie,因为它们会存储浏览器选项卡等以便重新打开。如果您想非常确定cookie将过期,我建议将ttl设置为少于一天的时间。对于会话的预期行为的等效性而言,这不是一个完美的解决方案

请参见示例代码段:

if (response.login) {
var session = { sid: response.sid};
request.cookieAuth.set(session);
// check if login form had remember me checkbox selected
if(request.payload.remember) {
  return reply.redirect(request.query.next); //uses default strategy ttl setting for cookie
}else{
  request.cookieAuth.ttl(24*60*60*1000); // override ttl to 24 hours
  return reply.redirect(request.query.next);
}
}
if (response.login) {
var session = { sid: response.sid};
request.cookieAuth.set(session);
// check if login form had remember me checkbox selected
if(request.payload.remember) {
  return reply.redirect(request.query.next); //uses default strategy ttl setting for cookie
}else{
  request.cookieAuth.ttl(24*60*60*1000); // override ttl to 24 hours
  return reply.redirect(request.query.next);
}
}