我正在为使用HapiJS和Hapi-auth-cookie策略的应用构建小型REST后端,但无法使其正常工作。我已经定义的路线是这样的:Hapi-auth-cookie设置cookie,但不会进行validationFunc调用并抛出未授权
/ - 为服务前端应用程序的一部分
/登录 - 执行MongoDB的检查用户,然后比较密码,最后试图设置cookie的
/餐馆 - 我试图与身份验证,以确保:“会话”,但不能使它工作
我定义的策略(几乎从高致病性禽流感,身份验证cookie的GitHub的PA复制过去ge),但正如我注意到,但使用console.log,在策略选项中传递的validateFunc甚至没有被调用一次。为什么?这是我的主要问题还是我的其他代码部分被破坏?
一些代码示例:
会话身份验证策略定义:
exports.register = function(server, options, next) {
const cache = server.cache({ segment: 'sessions', expiresIn: 3 * 24 * 60 * 60 * 1000 });
server.app.cache = cache;
server.auth.strategy('session', 'cookie', false, {
password: 'password-should-be-32-characters',
cookie: 'lun-cookie',
redirectTo: false,
isSecure: false,
ttl: 20 * 1000,
validateFunc: function (request, session, callback) {
cache.get(session.sid, (err, cached) => {
if (err) {
return callback(err, false);
}
if (!cached) {
return callback(null, false);
}
return callback(null, true, cached.account);
});
}
});
return next();
};
登录方法负责设置的cookie:
login: (request, reply) => {
const dbQuery = {
email: request.payload.email
};
UserSchema.findOne(dbQuery, (err, user) => {
if (err) {
return console.log(err);
}
if (!user) {
return reply(Boom.unauthorized());
}
Bcrypt.compare(request.payload.password, user.password, (err, res) => {
if (err) {
return console.log(err);
}
if (!res) {
return reply(Boom.unauthorized());
}
const sid = String(123);
request.server.app.cache.set(sid, { account: user }, 0, (err) => {
if (err) {
reply(err);
}
request.cookieAuth.set({ sid: sid });
return reply("ok");
});
})
});
}
路由定义的策略保证:
{
method: 'GET',
path: '/restaurants',
handler: controller.getRestaurants,
config: {
validate: {
query: {
list: Joi.string().allow('full').optional(),
type: Joi.string().valid(restaurantTypeEnum).optional(),
}
},
auth: 'session',
}
}
任何想法?我已经花了两天的时间试图找出答案。