@trickster2019

Почему не получается получить и записать token?

Добрый день, пытаюсь сделать аутентификацию в приложении но столкнулся с проблемой, того что пришедший token не записывается, пришедший token пытаюсь запихнуть в SharedPreferences.
Переменная для хранения данных и функция позволяющая записывать данные.
var prefUserToken:SharedPreferences?=null
fun saveUserToken(res:String){
    val editor = prefUserToken?.edit()
    editor?.putString("UserToken", res)
    editor?.apply()
}

Инициализация в MainActivity
prefUserToken=getSharedPreferences("UserToken", Context.MODE_PRIVATE)

Модели для запроса на аунтификацию и получение токена
data class AuthUser(
    val password:String,
    val username:String,
)

data class UserToken(
    val userToken: String
)

Запросы к API 
interface StockApi {
    @POST("Coffee/auth/users/")
    suspend fun registrationUser(@Body registrationUser: RegistrationUser):Response<ResponseRegistrationUser>

    @POST("auth/token/login/")
    suspend fun authUser(@Body authUser: AuthUser): Response<UserToken>
}

Репозиторий
class UserRepository @Inject constructor(
    private val userService: StockApi
): BaseApiResponse() {
    suspend fun registrationUser(user: RegistrationUser): Resource<ResponseRegistrationUser>{
        return safeApiCall { userService.registrationUser(user) }
    }

    suspend fun authenticationUser(user: AuthUser):Resource<UserToken>{
        return safeApiCall { userService.authUser(user) }
    }

}

UseCase
class AuthUserUserCase @Inject constructor(
    private val userRepository: UserRepository
) {
    suspend fun invoke(user: AuthUser)=userRepository.authenticationUser(user=user)
}

ViewModel
@HiltViewModel
class AuthenticationUserViewModel @Inject constructor(
    private val authUserUserCase: AuthUserUserCase
): ViewModel()  {
    private val _userToken = MutableLiveData<Resource<UserToken>>()
    val userToken:LiveData<Resource<UserToken>>
        get() = _userToken

    fun authUser(user: AuthUser){
        viewModelScope.launch {
            authUserUserCase.invoke(user = user).let {
                _userToken.value=it
            }
        }
    }

}

инициализация ViewModel
val authenticationUserViewModel= hiltViewModel<AuthenticationUserViewModel>()
val token=authenticationUserViewModel.userToken.observeAsState().value?.data

попытка записать токен
// захардкодил так как не хотел каждый раз писать в ручную
authenticationUserViewModel.authUser(AuthUser("Serg!@#$", "Serg"))
Thread.sleep(7000)
Log.d("User", token.toString())
if (token != null) {
                    saveUserToken(token.userToken)
} else{
                    saveUserToken("пусто")
}
navController.navigate(Graph.HOME)

в Log выводит
2023-05-13 09:55:10.799 9138-9138/ru.example.coffeekotlin D/User: null


и при заходе на экран где должен отображаться token отображается вариант из else(token должен отображаться рядом с "Имя")
645e18c794023653920178.png
и что самое интересное токен я получаю в терминале с помощью OkHttp
I/okhttp.OkHttpClient: {"auth_token":"7e0e72e274bbda5e6f3cc9e3563f8c41384a37af"}
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы