Node.js gRPC: Wie werden authentifizierte Benutzerdaten vom Interceptor an den Method Handler übergeben?JavaScript

Javascript-Forum
Anonymous
 Node.js gRPC: Wie werden authentifizierte Benutzerdaten vom Interceptor an den Method Handler übergeben?

Post by Anonymous »

Ich migriere derzeit meine interne Dienstkommunikation von REST (Express.js) zu gRPC in einer Node.js-Umgebung.
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 });
}
Meine Frage: Gibt es ein Standardmuster oder eine Best Practice in Node.js gRPC (insbesondere die Verwendung von @grpc/grpc-js), um anforderungsbezogene Daten (wie ein authentifiziertes Benutzerprofil) zwischen einem Interceptor und der Methodenimplementierung zu teilen?
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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post