Справочная информация (способ 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 });
}
Должен ли я изменять метаданные, но необходимо сериализовать данные...
ИЛИ есть ли способ использовать что-то вроде AsyncLocalStorage для достижения такого распространения контекста?
Подробнее здесь: https://stackoverflow.com/questions/798 ... method-han
Мобильная версия