私はルートがヒットする前に実行されるメカニズムを実装しようとしています。この仕組みでは、ヘッダーから値を取り出し、認証を確認したいと考えています。Hapi.js - すべてのルートを確認するためのメカニズムを追加する
私はこれが出ている: server.js:
// Create a server with a host and port
'use strict';
var Hapi = require('hapi');
var mongojs = require('mongojs');
var plugins = [
require('./routes/entities')
];
var server = new Hapi.Server();
server.connection({
port: 3000
});
//Connect to db
server.app.db = mongojs('hapi-rest-mongo', ['entities']);
server.app.checkHeader = function (request) {
var header = request.headers['x-authorization'];
if(header === "letmein"){
return true
}
return false
};
//Load plugins and start server
server.register(plugins, function (err) {
if (err) {
throw err;
}
// Start the server
server.start(function (err) {
console.log('Server running at:', server.info.uri);
});
});
とroutes.entitiesで:
'use strict';
var Boom = require('boom');
var uuid = require('node-uuid');
var Joi = require('joi');
exports.register = function (server, options, next) {
var db = server.app.db;
server.route({
method: 'GET',
path: '/entities',
handler: function handler(request, reply) {
if(!server.app.checkHeader(request))
{
return reply(Boom.unauthorized());
};
//request.server.myFunc();
db.entities.find(function (err, docs) {
if (err) {
return reply(Boom.wrap(err, 'Internal MongoDB error'));
}
reply(docs);
});
}
});
をそう簡単に言えば、私は私の機能サーバーを登録したサーバの起動時に.app.checkHeader
そして私はそれを呼び出してrそれにはがあります。 Requestオブジェクトには、ヘッダーに関する情報が含まれます。
これは機能しますが、私はHapiのベストプラクティスに従わないと感じています。
私はもっと上品にそれを行うことができますか?
フック?たとえばonPreHandlerです。 http://hapijs.com/api#request-lifecycleを参照してください。この場合、Hapi独自の認証機能を使用する方が良いと思います。 – estus
戦略を導入する例https://github.com/hapijs/hapi-auth-cookie/blob/master/lib/index.js – Rabea
私はすでにそれを実装しています。これは私がヘッダーに必要なものです。 –