This commit is contained in:
Eric85710 2026-07-04 16:20:29 +08:00
parent 3ce74a8af1
commit bf26416238

View file

@ -49,17 +49,25 @@ 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
// 修正:帶入 Refresh Token 機制所需的所有新欄位 if (userInfo != null) {
tokenManager.saveAuthData( // 這裡的 userInfo 已經被 Kotlin 自動辨別為「絕對非空」的 UserInfo 了
userId = userId, val userId = userInfo.id
accessToken = loginResponse.access_token,
refreshToken = loginResponse.refresh_token,
expiresInSec = loginResponse.expires_in
)
_loginState.value = LoginUiState.Success(loginResponse.user) tokenManager.saveAuthData(
userId = userId,
accessToken = loginResponse.access_token,
refreshToken = loginResponse.refresh_token,
expiresInSec = loginResponse.expires_in
)
_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()}")
} }