P粉7948519752023-09-05 00:52:04
我找到了一個方法來「黑掉」關於無法從signInWithCredential
取得displayName
的問題。顯然,如同先前所說的,displayName
總是為null。但是,如果你使用google_sign_in
庫進行登入並檢查GoogleSignInAccount
對象,你將會看到你將擁有該顯示名稱。然後,你可以使用之前使用的Google登入憑證登入Firebase。
以下是我使用的程式碼:
try { GoogleSignIn _googleSignIn = GoogleSignIn(); GoogleSignInAccount? googleSignInAccount = await _googleSignIn.signIn(); if (googleSignInAccount == null) { print('error getting google sign in account'); return; } GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount!.authentication; AuthCredential credential = GoogleAuthProvider.credential( idToken: googleSignInAuthentication.idToken, accessToken: googleSignInAuthentication.accessToken); var result = (await _auth.signInWithCredential(credential)); user = result.user; displayName = googleSignInAccount.displayName; } catch (e) { print(e); }
在user
變數中,你將擁有來自firebase
身份驗證的所有與使用者相關的變量,例如uid
,而從googleSignInAccount
中你可以取得顯示名稱。
希望這能幫助某人!
P粉0738579112023-09-05 00:03:58
預設情況下,User
的displayName
屬性為空。它取決於使用者在建立或更新時是否設定了displayName
。但預設情況下它是null
。
如果你想在某個地方更新displayName
,可以使用以下方法:#updateProfile
##:
import { getAuth, updateProfile } from "firebase/auth"; const auth = getAuth(app); const user = auth.currentUser; await updateProfile(user, { displayName: "John Doe" }); console.log(user.displayName);如果你確定你的Google帳號中有
displayName,但在
user.displayName中沒有顯示出來,那麼你需要檢查你傳遞給
GoogleAuthProvider.credential( )方法的
idToken是否為
null,確保你也傳遞了有效的
idToken。