私はHapiJSおよびHapi-auth-cookie戦略を使用してアプリケーション用の小さなRESTバックエンドを構築していますが、アプリケーションHapi-auth-cookieはクッキーを設定しますが、validationFuncコールを作成せずにUnauthorizedをスローします
/ログインのフロントエンド部分を提供するために - -
/パスワードを比較し、その後、ユーザーに確認のMongoDB、最後にクッキー
を設定しようとして実行します。私はこのようなルートを定義しました/レストラン - 私はAUTHで固定してみました:「セッション」が、それは
を動作させることができない私は戦略を定義したが(ほとんどHAPI-AUTH-クッキーgithubのPAから過去をコピーします私は気付いたが、console.logを使って、戦略オプションで渡されたvalidateFuncは一度も呼び出されていない。どうして?それは私の主な問題ですか、それとも私のコードの他の部分が壊れていますか?
いくつかのコードサンプル:
セッション認証戦略の定義:Cookieを設定する責任
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();
};
ログイン方法:戦略で固定
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',
}
}
私はすでにそれを理解しようと2日間過ごしました。