Hintergrund (der Express-Weg):: In meinem vorherigen Express.js-Setup habe ich Middleware verwendet, um das Token anhand von Headern zu überprüfen, und die dekodierten Benutzerdaten an das req-Objekt (z. B. req.user) angehängt. Dies ermöglichte nachfolgenden Routenhandlern den einfachen Zugriff auf die Informationen des aktuellen Benutzers.
Das Problem (die gRPC-Methode):: Ich versuche, dieses Muster mithilfe von gRPC-Interceptoren zu replizieren. Ich überprüfe das Token im Interceptor, finde aber keine Standardmethode, um die dekodierten Benutzerdaten an den eigentlichen RPC-Methodenhandler weiterzuleiten.
Code: Select all
const authInterceptor = (options, call) => {
return new interceptors.InterceptingCall(call, {
start: function(next) {
next({
onReceiveMetadata: function (metadata, next) {
console.log('[Server Interceptor] Received metadata:', metadata);
// get token from token
const token = metadata.get('auth-token')[0];
// ....
// * extend call object
call.user = {
name: 'test',
role: 'admin'
}
next(metadata);
}
});
},
});
};
Code: Select all
function sayHello(call, callback) {
console.log(call.user); // ! call.user is undefined
console.log(`[Server] Received request with name: ${call.request.name}`);
callback(null, { message: 'Hello ' + call.request.name });
}
Sollte ich die Metadaten ändern, aber Daten serialisieren müssen ...
ODER gibt es eine Möglichkeit, so etwas zu verwenden AsyncLocalStorage, um diese Kontextweitergabe zu erreichen?
Mobile version