Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 21.11.2022
Сообщений: 1
1

Как правильно реализовать сложную аутентификацию

21.11.2022, 20:09. Показов 208. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, у меня такой вопрос. Для аутентификации мне сперва нужно
1. Ввести логин и пароль.
2. Отправить post запрос на сервер где проверяется логин и пароль и возвращаются результат ок или нет и токена секретного.
3. Если результат ок опять обращение к другому серверу по api с токеном, получаем от сервера список, что-то из него выбираем и начинаем работать.

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

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

В общем немного спутанно изложил, т.к. не до конца понимаю как правильно эту задачу решать. Спасибо всем кто прочитал.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2022, 20:09
Ответы с готовыми решениями:

Как правильно реализовать доступ во внутреннюю (корпоративную) сеть из внешней и реализовать аутентификацию
Доброго времени суток. Вобщем суть вопроса... есть настроенный в корпоративной среде Sql Server...

Как правильно настроить аутентификацию?
Доброго времени суток. Третий день бьюсь с проблемой аутентификации WCF. Кучу всего перерыл,...

Как правильно записать сложную формулу
Всем привет, я студент, только перешли к формулам. Прошу помощи экспертов в записи этой формулы на...

Как реализовать такую сложную анимацию?
Интересует анимация на этом сайте. pride-reklama.ru изучил немного html css. хотел бы научиться...

1
49 / 37 / 14
Регистрация: 05.02.2010
Сообщений: 249
24.11.2022, 22:51 2
Это довольно стандартная задача.
Обычно решается примерно так:
Создается класс для состояния:
Kotlin
1
2
3
4
5
sealed class FlowResult {
    data class Success(val value: Any?) : FlowResult()
    data class Error(val error: String?) : FlowResult()
    data class Loading(val nothing: Nothing? = null) : FlowResult()
}
Более продвинутый вариант:
Кликните здесь для просмотра всего текста

Если не понятно что такое Т, то читать про джинерики
Kotlin
1
2
3
4
5
sealed class FlowResult<out T> {
    data class Success<T>(val value: T) : FlowResult<T>()
    data class Error(val error: String? = "") : FlowResult<Nothing>()
    data class Loading(val nothing: Nothing? = null) : FlowResult<Nothing>()
}


Дальше во ViewModel используем stateflow:

Kotlin
1
val flow: MutableStateFlow<FlowResult> = MutableStateFlow(FlowResult.Loading())
Функция, которая отправляет запросы при запуске в этот flow сует FlowResult.Loading() (невзирая что изначально он уже в таком состоянии, это нужно для повторых запросов)
В случаи успеха и неудачи соответствующие классы Success и Error

Просто в качестве примера:
Кликните здесь для просмотра всего текста

Kotlin
1
2
3
4
5
6
7
8
9
10
    fun getContactsFromDB() {
        viewModelScope.launch {
            flow.emit(FlowResult.Loading())
            val contacts = localRepository.getAllContacts()
            if (contacts.isEmpty())
                flow.emit(FlowResult.Error("empty database")) 
            else
                flow.emit(FlowResult.Success(contacts))
        }
    }


Ну и в самой активити/фрагменте/Compose

Kotlin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    fun getResultsFromViewModel() {
        lifecycleScope.launchWhenStarted {
            viewModel.getContactsFromDB // запускаем функцию, которая отправляет запросы
            viewModel.flow.collect { flowResult ->
                when (flowResult) {
                    is FlowResult.Success -> {
// Показываем результат успеха
                    }
                    is FlowResult.Loading -> showProgressBar()
                    is FlowResult.Error -> showError(flowResult.error)
                }
            }
        }
    }
В Compose вызываются соответствующие Composable функции.
В XML у нас есть прогресс бар по центру экрана, textView по центру экрана (оба Visability = GONE по-умолчанию), плюс основной контент.

Kotlin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    private fun showError(error: String?) {
        binding.apply {
            progressBar.visibility = View.GONE
            textView.visibility = View.VISIBLE
            textView.text = error
        }
    }
 
    private fun showProgressBar() {
        binding.apply {
            textView.visibility = View.INVISIBLE
            progressBar.visibility = View.VISIBLE
        }
    }
Т.е. вызываемыми функциями выставляем видимость нужным элементам. В примерах используется ViewBinding
0
24.11.2022, 22:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2022, 22:51
Помогаю со студенческими работами здесь

Реализовать аутентификацию через сторонний сервис
Мне в проекте необходимо реализовать аутентификацию через сторонний сервис, но я столкнулся с такой...

Надо подружить HTTP-аутентификацию и аутентификацию на сессиях
Спасайте, плиз Есть два раздела (читаем &quot;две папки&quot;) в корне хостинга (например, r1 и r2). В...

Не получается правильно переписать сложную функцию
Здравствуйте, вот никак не получается переписать в Matchcad'e правильно) подчёркивает красным...

Реализовать сложную передаточную функцию в Simulink
Всех с наступающим! Помогите реализовать данную передаточную функцию Wд(S) = (Tд2 S + 1)(Tд3 S +...

Реализовать аутентификацию с помощью UID (SASL/DIGEST-MD5) в OpenLDAP/LdapAdmin
Доброго всем дня. Собственно второй месяц бьюсь с задачей настройки openldap. Изначально пробовал...

Большие числа java, реализовать не сложную формулу
Нужно написать программу ApproximateE.java для нахождения приближенного значения числа &quot;e&quot;,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru