Роль аутентификации - Чистая архитектура - PullRequest
0 голосов
/ 07 марта 2019

В последнее время я столкнулся с проблемой, которую я не смог найти решение, я строю приложение для Android, следуя Чистой архитектуре, и все шло хорошо, пока я не подумал о роли аутентификации.

У меня есть такая структура (слои) в моем приложении: [ui] (действия и фрагменты) -> [презентация] (просмотр моделей) -> [домен] (вариант использования) -> данные -> [удаленный, кеш, база данных].

Теперь давайте предположим, что я хочу войти в свое приложение, сначала я пройду через экран входа в систему и введу учетные данные пользователей, после этого я вызову LoginViewModel, а затем LoginUseCaseпередавая электронную почту и пароль.В свою очередь, сценарий использования вызовет хранилище, скажем, аутентификацию, а затем я сделаю запрос к бэкэнду с учетными данными, если все в порядке, тогда я получу обратно токен, который должен каким-то образом сохранить,проблема начинается здесь, я создал перехватчик, который отвечает за получение токена из заголовка, но я должен сохранить его, и для этого мне нужен доступ к общим настройкам, правильно ли иметь доступ к нему внутри моего перехватчика?И в каждом запросе мне приходилось отправлять его на свой сервер, какой подход лучше?

Я также видел этот учебник https://medium.com/@tsaha.cse/advanced-retrofit2-part-2-authorization-handling-ea1431cb86be, но я думаю, что неправильно иметь доступ к базе данных внутри класса вашего приложения, я не прав?

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

1 Ответ

0 голосов
/ 07 марта 2019

это на самом деле не связано с CleanArchitecture. Вот ответы на ваши вопросы:

  1. Я должен сохранить его, и для этого мне нужен доступ к общим настройкам, правильно ли иметь доступ к нему внутри моего перехватчика?

-> Да, вы должны сохранить его в SharedPreferences, но вы не должны обращаться к SharedPreferences внутри вашего interceptor. Вы должны создать свой interceptor Singleton и создать новую функцию setHeaderToken(String token) в своем interceptor. После авторизации вы можете установить токен заголовка на interceptor. Что-то вроде:

class MyInterceptor{
    String token = null;
    public void setHeaderToken(String token){
         //do set...
    };
    @Override
    public Response intercept(Chain chain) throws IOException {
         if(token == null) //do nothing
         else // do add header
    }
}

// add the singleton Interceptor to your OkHttp Client Builder and use it.
  1. Вы не должны напрямую связывать класс Application с вашей базой данных. Для этого вам следует использовать слой домена.
...