dm-191
This commit is contained in:
parent
3ce74a8af1
commit
bf26416238
1 changed files with 17 additions and 9 deletions
|
|
@ -49,9 +49,13 @@ class AuthViewModel @Inject constructor(
|
||||||
if (response.isSuccessful && response.body() != null) {
|
if (response.isSuccessful && response.body() != null) {
|
||||||
val loginResponse = response.body()!!
|
val loginResponse = response.body()!!
|
||||||
|
|
||||||
val userId = loginResponse.user.id // 這裡如果是 String 就不需要 toString()
|
// 💡 1. 提取 user 物件並用 val 鎖定,讓 Kotlin 可以進行 Smart Cast
|
||||||
|
val userInfo = loginResponse.user
|
||||||
|
|
||||||
|
if (userInfo != null) {
|
||||||
|
// 這裡的 userInfo 已經被 Kotlin 自動辨別為「絕對非空」的 UserInfo 了
|
||||||
|
val userId = userInfo.id
|
||||||
|
|
||||||
// 修正:帶入 Refresh Token 機制所需的所有新欄位
|
|
||||||
tokenManager.saveAuthData(
|
tokenManager.saveAuthData(
|
||||||
userId = userId,
|
userId = userId,
|
||||||
accessToken = loginResponse.access_token,
|
accessToken = loginResponse.access_token,
|
||||||
|
|
@ -59,7 +63,11 @@ class AuthViewModel @Inject constructor(
|
||||||
expiresInSec = loginResponse.expires_in
|
expiresInSec = loginResponse.expires_in
|
||||||
)
|
)
|
||||||
|
|
||||||
_loginState.value = LoginUiState.Success(loginResponse.user)
|
_loginState.value = LoginUiState.Success(userInfo)
|
||||||
|
} else {
|
||||||
|
// 💡 2. 防禦後端雖然回傳 200,但 user 物件卻是 null 的極端狀況
|
||||||
|
_loginState.value = LoginUiState.Error("登入失敗:伺服器未回傳用戶資訊")
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
_loginState.value = LoginUiState.Error("登入失敗:${response.code()}")
|
_loginState.value = LoginUiState.Error("登入失敗:${response.code()}")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue