Добрый день, пытаюсь сделать аутентификацию в приложении но столкнулся с проблемой, того что пришедший 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 должен отображаться рядом с "Имя")
и что самое интересное токен я получаю в терминале с помощью OkHttp
I/okhttp.OkHttpClient: {"auth_token":"7e0e72e274bbda5e6f3cc9e3563f8c41384a37af"}