私のhapijsアプリには、認証戦略にプラグインをsession
使用する必要があるルートがほとんどありません。これらのルートに( Labhapi-auth-cookie
を介して)いくつかのテストを追加したいと思います。
before
このシナリオのテストを (おそらく ? 経由で) セットアップする方法に関するドキュメントが見つかりませんでした。どんな助けでも大歓迎です。前もって感謝します。
credentials
認証されたユーザーのみが必要な場合は、テストでユーザーをプロパティに割り当てるだけです。
var user = { ... };
server.inject({ method: 'GET', url: '/', credentials: user }, function (res) {
console.log(res.result);
});
これを示す例を次に示します。
var Bcrypt = require('bcrypt');
var Hapi = require('hapi');
var HapiAuthCookie = require('hapi-auth-cookie');
var server = new Hapi.Server();
server.connection({ port: 3000 });
var users = {
john: {
username: 'john',
password: '$2a$10$iqJSHD.BGr0E2IxQwYgJmeP3NvhPrXAeLSaGCj6IR/XU5QtjVu5Tm',
name: 'John Doe',
id: '2133d32a'
}
};
var validate = function (request, username, password, callback) {
var user = users[username];
if (!user) {
return callback(null, false);
}
Bcrypt.compare(password, user.password, function (err, isValid) {
callback(err, isValid, { id: user.id, name: user.name });
});
};
server.register(HapiAuthCookie, function (err) {
server.auth.strategy('session', 'cookie', {
password: 'secret',
validateFunc: validate
});
server.route({
method: 'GET',
path: '/',
config: {
auth: 'session',
handler: function (request, reply) {
reply('hello, ' + request.auth.credentials.name);
}
}
});
server.inject({ method: 'GET', url: '/', credentials: users.john }, function (res) {
console.log(res.result);
});
});
例の大部分は、Authentication Tutorialから取られました。
テスト中のセッションの必要性のために、hapi-session-injectを作成しました。使い方は以下の通り
const server = new Hapi.Server();
const session = new Session(server);
// Callback interface
session.inject('/', (res) => {
...
});
// Promise interface
return session.inject('/').then((res) => {
...
});
それが役に立てば幸い。