https://jwt.io
современный подход, кратко: храните у пользователя токен, и ключ, который доказывает серверу что токен не поддельный.
Прикол в том, что вы таким образом можете хранить у пользователя сессионные данные, это хорошо для масштабирования проекта ( не нужно думать на какой ноде лежит пользовательская сессия, а можно кидать его на любую). Т.е. можно хранить например: {userId: 123, userRole : 'admin' }
Проблемы с JWT это с обновлением токена. Делают либо бессрочный доступ, либо например на месяц, через месяц пользователь будет вынуждень заново залогинится. Не удобно, но решаемо, на стековерфлоу были примеры обхода этого ограничения при помощи рефреш токена.