From bf264162382d887c880189d945e6757d6329cd38 Mon Sep 17 00:00:00 2001 From: Eric85710 Date: Sat, 4 Jul 2026 16:20:29 +0800 Subject: [PATCH] dm-191 --- .../auth/login/Login_Page_ViewModel.kt | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/example/login_v3/auth/login/Login_Page_ViewModel.kt b/app/src/main/java/com/example/login_v3/auth/login/Login_Page_ViewModel.kt index 6b8f922..8184e7a 100644 --- a/app/src/main/java/com/example/login_v3/auth/login/Login_Page_ViewModel.kt +++ b/app/src/main/java/com/example/login_v3/auth/login/Login_Page_ViewModel.kt @@ -49,17 +49,25 @@ class AuthViewModel @Inject constructor( if (response.isSuccessful && response.body() != null) { val loginResponse = response.body()!! - val userId = loginResponse.user.id // 這裡如果是 String 就不需要 toString() + // 💡 1. 提取 user 物件並用 val 鎖定,讓 Kotlin 可以進行 Smart Cast + val userInfo = loginResponse.user - // 修正:帶入 Refresh Token 機制所需的所有新欄位 - tokenManager.saveAuthData( - userId = userId, - accessToken = loginResponse.access_token, - refreshToken = loginResponse.refresh_token, - expiresInSec = loginResponse.expires_in - ) + if (userInfo != null) { + // 這裡的 userInfo 已經被 Kotlin 自動辨別為「絕對非空」的 UserInfo 了 + val userId = userInfo.id - _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 { _loginState.value = LoginUiState.Error("登入失敗:${response.code()}") }