Какой надежный способ сохранить текущего вошедшего в систему пользователя в чистой архитектуре Android? - PullRequest
0 голосов
/ 05 июня 2019

Я искал чистый, надежный способ сохранения текущего пользователя в приложении Android, которое доступно из любого действия / представления, доступно немедленно и может быть надежно очищено при выходе из системы.

Чтобы добавить дополнительный контекст, приложение обрабатывает аутентификацию API с помощью токена (JWT). К сожалению, в полезной информации нет информации о пользователе.

Существует архитектура MVVM, и есть уровень репозитория, который вызывает модифицированный API / room db.

Вот вещи, которые я изучаю, хотелось бы узнать, есть ли какие-нибудь более эффективные пути или есть другой шаблон / архитектура, который я еще не обнаружил:

  • В настоящее время объект User сохраняется в классе Application. Я ненавижу это лично, это то, что существовало ранее. После успешного входа в систему JWT сохраняется в SharedPreferences, а объект User сохраняется как статическая переменная в классе Application.
  • Сразу же возникает мысль сохранить хотя бы важные биты пользователя в SharedPreferences. Я пытался найти способ «связать» пользователя с JWT, хотя общие предпочтения не очень хорошо работают с объектами. Я представляю сценарий, в котором у меня может быть сохраненный токен для одного пользователя, но объект User для другого, который вызовет всевозможные проблемы.
  • Наряду с нашим сервисным уровнем модифицированного API, появилась базовая комната Room db, поскольку я медленно пытаюсь включить локальное кэширование в приложение. Так что я знаю, что могу сохранить User здесь, хотя беспокоюсь об асинхронной природе вызовов БД.
  • Я чувствую, что мне нужен какой-то архитектурный слой, SesssionManager или что-то, что заботится обо всем этом. Будет «удерживать» пользователя, токен, имеющий глобальный метод Logout(), так или иначе, он будет хорошо играть со слоем хранилища, так что View и ViewModels не нужно вообще беспокоиться о пользователе или userId, просто сделайте различные вызовы репозитория и слои данных (сервис репозитория / дооснащения) будут возвращать то, что подходит для текущего вошедшего в систему пользователя и т. д.

Извините, если это немного абстрактный / высокий уровень без какого-либо конкретного кода, я просто помню, как несколько месяцев назад нашел отличную статью, связанную с этим понятием слоя сеанса, и не ставил его в закладки, а теперь пытаюсь почесать голову разработать лучший способ добиться этого чисто.

...