Ich arbeite an einem Rest API-Projekt, das mit HapiJS geschrieben wurde. Nach dem Login-Vorgang erhält der Benutzer ein Token, um den Header jeder Anfrage zu übergeben. Benutzer haben unterschiedliche Rollen (Admin, Standard, Gast, Partner) und einige Api-Endpunkte sind nur für Benutzer mit einer bestimmten Rolle erreichbar. Jemand könnte mir helfen, diesen Scheck auf eine nette Art zu definieren, also ohne den Scheck jedes Mal innerhalb der Route zu schreiben?Rollenbasierte Authentifizierung in HapiJS
12
A
Antwort
23
Scopes
Sie können scopes
in hapi verwenden. Wenn Sie die Anforderung authentifizieren, indem die Header-Kontrolle, können Sie die scope
Eigenschaft der Anmeldeinformationen des Benutzers festgelegt:
var validateFunc = function (username, password, callback) {
... // Your logic here
return callback(null, true, {scope: 'admin'});
};
Wenn eine Route definieren, können Sie die scopes
gesetzt, die in der config.auth.scope
Eigenschaft zu diesem Endpunkt zulässig:
Jetzt können nur Benutzer, die mit dem Gültigkeitsbereich user
oder admin
authentifiziert sind, auf diese Route zugreifen.
Prozess
- auf einige Bereiche Entscheiden (admin, Super-User, Gast usw.)
- Konfigurieren Sie Ihre Authentifizierungsroutine korrekt die
scope
auf Anmeldeinformationen des Benutzers - Konfigurieren Sie Ihre Routen festgelegt durch die Einstellung
config.auth.scope
an wen auch immer Zugang erlaubt ist
Runnable Beispiel
var Hapi = require('hapi');
var server = new Hapi.Server();
server.connection({ port: 4000 });
server.register(require('hapi-auth-basic'), function (err) {
if(err) {
throw err;
}
server.auth.strategy('simple', 'basic', {
validateFunc: function (username, password, callback) {
if (username === 'admin') {
return callback(null, true, {scope: 'admin'}); // They're an `admin`
}
if (username === 'user') {
return callback(null, true, {scope: 'user'}); // They're a `user`
}
return callback(null, false);
}
});
server.route([{
config: {
auth: {
strategy: 'simple',
scope: ['admin'] // Only admin
},
},
method: 'GET',
path: '/admin',
handler: function(request, reply) {
reply('Admin page');
}
}, {
config: {
auth: {
strategy: 'simple',
scope: ['user', 'admin'] // user or admin
},
},
method: 'GET',
path: '/user',
handler: function(request, reply) {
reply('User page');
}
}
]);
server.start(function() {
console.log('Started server');
});
});
, wo Sie die Rückkehr des Rückrufs von validateFunc bekommen meine ich in Handler oder wo? Ich möchte das Ergebnis von validateFunc im Falle von impliziten API von Rest-Hapi-Modul erstellt werden.Oder im Detail überprüfen Sie bitte: - https://stackoverflow.com/questions/44546596/how-to-get-result-of-validatefunc- in-vor-automatisch-erstellt-api-rest-hapi –