「remember me」チェックボックスがあるユーザーログインページを作成しようとしています。シンプルですね。
ユーザーが「remember me」チェックボックスを選択せずにログインすると、デフォルトのセッション ttl が 10 秒 (10000 ミリ秒) に設定されます。ただし、「remember me」チェックボックスが選択されている場合、ttl は 100000 秒 (100000000 ミリ秒) に設定されます。
ユーザー名とパスワードの認証をすべてスキップして、この小さなデモをセットアップして目標を実証しました。残念ながら、セッション ttl は常に 10 秒であり、決して 100000 秒ではないようです。
以下のコードのペーストビンはこちら: http://pastebin.com/45bRfxkn
var Hapi = require('hapi');
var AuthCookie = require('hapi-auth-cookie');
var server = new Hapi.Server('localhost',4000); // make a server
// this function is just for my example, I'll use an actual logger later...
function xhrlog(request){
var auth = request.auth.isAuthenticated ? "Authenticated" : "Not Authenticated";
console.log(request.method.toUpperCase()+" request to "+request.path+" is "+auth+".");
}
// this is the handler for the '/' route. You should start at this route first (it represents the login page)
function firstLoad(request, reply){
xhrlog(request);
request.auth.session.set({});
reply("<p style='color:blue'>click the button to test.</p><input type='button' id='foo' value='click me'></input><script>document.getElementById('foo').addEventListener('click', function(){ window.location = './newLocation'});</script> ");
}
// this is the page that i would expect to have created a session cookie with a ttl of 100000. But it doesnt.
function authorized(request,reply){
xhrlog(request);
reply("<p style='width: 300px;'>This is the authorized page. I would expect this page to have a session timeout of 100000 seconds. But it doesnt, it only has 10 seconds. Keep refreshing to see if you are still alive!</p>");
}
// set up the unauthenticated route here. this is the "login" page.
server.route({
method:'GET',
path:'/',
config: {
handler: firstLoad
}
});
server.pack.register(AuthCookie, function(err){
// set up strategy for the session cookie. It defaults to 10000 ms
server.auth.strategy('session', 'cookie', {
password: 'secret',
cookie: 'iDontKnowWhatThisIsFor',
redirectTo: '/',
isSecure: false,
ttl: 10000
});
// set up the route for the 'remember me' page. It should have a ttl of 100000000 ms.
server.route({
method: 'GET',
path: '/newLocation',
config: {
handler: authorized,
auth: {
mode: 'try',
strategy: 'session'
},
plugins: { 'hapi-auth-cookie' : { ttl: 100000000 }}
}
});
});