Node.js gRPC: как передать аутентифицированные пользовательские данные из перехватчика в обработчик метода?Javascript

Форум по Javascript
Ответить
Anonymous
 Node.js gRPC: как передать аутентифицированные пользовательские данные из перехватчика в обработчик метода?

Сообщение Anonymous »

В настоящее время я переношу свою внутреннюю служебную связь с REST (Express.js) на gRPC в среде Node.js.
Справочная информация (способ Express). В моей предыдущей настройке Express.js я использовал промежуточное программное обеспечение для проверки токена из заголовков и прикрепил декодированные пользовательские данные к объекту req (например, req.user). Это позволило последующим обработчикам маршрутов легко получить доступ к информации текущего пользователя.
Проблема (способ gRPC): я пытаюсь воспроизвести этот шаблон с помощью перехватчиков gRPC. Я проверяю токен внутри перехватчика, но не могу найти стандартный способ передать декодированные пользовательские данные фактическому обработчику метода RPC.

Код: Выделить всё

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);
}
});
},
});
};

Код: Выделить всё

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 });
}
Мой вопрос: существует ли в Node.js gRPC стандартный шаблон или передовая практика (в частности, использование @grpc/grpc-js) для совместного использования данных области запроса (например, аутентифицированного профиля пользователя) между перехватчиком и реализацией метода?
Должен ли я изменять метаданные, но необходимо сериализовать данные...
ИЛИ есть ли способ использовать что-то вроде AsyncLocalStorage для достижения такого распространения контекста?

Подробнее здесь: https://stackoverflow.com/questions/798 ... method-han
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»