Как только пользователь успешно прошел аутентификацию, вы можете передать токен с сервера в приложение и сохранить этот токен в клиентском приложении в localStorage или indexedDB. Затем используйте токен, чтобы войти в систему. Убедитесь, что токен действительно является частью сериализованного объекта, который включает в себя срок действия токена. Например:
"rememberLogin": {
"token": "43f250704a6bc737c830cc43739973b14e67ada07dca378a1725c3106c8e4f0f607cf11e2a3a2b08e8c053c19ccc781faf4f549e0e42cf6e2fe3b018a35da0f513ffe577f6d241db54a83ef30584c06e",
"expiry": "2018-09-10T16:35:00.304Z"
}
Дата истечения срока действия токена, хранящаяся на клиенте, предназначена только для целей UX (вы можете использовать ее для принудительного перехода пользователя к форме входа в систему после истечения срока действия). В целях безопасности используйте срок действия токена, который хранится на сервере (а не на клиенте), чтобы проверить фактическую подлинность токена. Также убедитесь, что после каждой успешной аутентификации на основе токена вы либо удаляете токен из базы данных, либо помечаете его как использованный; также на клиенте вы должны заменить старый токен новым.
Я подчеркиваю локальное хранение токена для облегчения «запоминающихся входов в систему», а не локальное хранение имени пользователя и пароля пользователя. Никогда не храните имя пользователя и пароль на клиенте; если вы это сделаете, их будет слишком легко обнаружить, и они гораздо более чувствительны, чем непредсказуемый токен с датой истечения срока действия. Токен с датой истечения срока действия - путь.