• Access / refresh token на микросервисе?

    @ElijahCapricorn
    На самом деле, это частая практика - выделать в отдельный микросервис сервис авторизации и аутентификации. К примеру, OpenID именно так и задумывался.
    Если сервис ляжет, то у вас две потенциальные проблемы: клиенты не смогут получать новые токены, а апи сервисы не смогут валидировать токены от клиентов. От первой проблемы вы никак не избавитесь. А вторая может быть решена использованием JWT токенов, благодаря наличию подписи, апи сервисы могут провалидировать токен самостоятельно, не обращаясь к сервису авторизации.
    Ответ написан
    Комментировать
  • Как можно реализовать вывод ID из базы данных в переменную?

    @ElijahCapricorn
    Можно просто создать переменную перед вызовом getConnection

    let id;
    pool.getConnection(function(err, connect) {
        connect.query(..., function(err, result) {
            ...
            if(!err && result.length !== 0) {
                id = result.id;
            }
            ...
        }
    }

    Но из-за того, что запросы к БД асинхронные Вы не сможете узнать когда значение запишется в переменную.

    По этой причине в асинхронные функции передают коллбэк, который на вход получит результат выполнения асинхронного кода.
    function createOrUpdateUsersCallback(err, result) {
        if (err) {
    		console.log(err);
    	}
    	else {
    		// Use result.id as you want
    	}
    }
    
    function createOrUpdateUsers(callback) {
    	pool.getConnection(function(err, connect) {
    		connect.query(..., function(err, result) {
    			if(err) {
    				callback(err, null);
    			}
    			else {
    				// Do create or update 
    				callback(null, result);
    			}
    
    		}
    	}
    }
    
    createOrUpdateUsers(createOrUpdateUsersCallback);

    Но в современном мире с асинхронным кодом проще всего работать через промисы и async/await
    На промисах это будет что-то вроде
    const createOrUpdateUsersPromise = new Promise((resolve, reject) => {
    	function createOrUpdateUsers(callback) {
    		pool.getConnection(function(err, connect) {
    			connect.query(..., function(err, result) {
    				if(err) {
    					reject(err);
    				}
    				else {
    					// Do create or update 
    					resolve(result);
    				}
    
    			}
    		}
    	}
    })
    
    const result = await createOrUpdateUsersPromise();
    const id = result.id;
    Ответ написан
    Комментировать
  • Кто может подробно рассписать про интерфейсы innumerable, ienumerator, 2 раза перечитывал, как использовать не понимаю?

    @ElijahCapricorn
    На практике, чаще всего IEnumerable используют в циклах foreach для обхода коллекций и в связке с LINQ для преобразования коллекций.
    В качестве практики можете попробовать написать свою реализацию Select и Where методов из LINQ, они очень просты для воспроизведения и хорошо подойдут для освоения навыков работы с коллекциями в дотнете.
    Ответ написан
    Комментировать
  • C#. Как зашифровать/дешифровать пароль для передачи его консольной программе в виде аргумента?

    @ElijahCapricorn
    Передавать пароли через аргументы небезопасно - их может прочитать любой другой процесс с админскими правами, это можно увидеть на примере диспетчера задач.
    Если планируете запускать приложение под Windows, то посмотрите в сторону Windows Credentials Manager. Он предоставляет безопасное окно для ввода учетных данных, а так же решает проблему безопасного хранения логинов и паролей.
    Ответ написан