搜尋

首頁  >  問答  >  主體

Firebase中的displayName為空的問題在使用signInWithCredential進行登入時出現

<p>我正在使用Google登錄,提示用戶輸入Google帳號的電子郵件和密碼:</p> <pre class="brush:php;toolbar:false;">const auth = getAuth(app); const userCredentials = await signInWithCredential( auth, GoogleAuthProvider.credential(null, token) ); console.log(userCredentials.user)</pre> <p>我成功取得到使用者對象,其中包含<code>email</code>、<code>photoURL</code>、<code>uid</code>等資訊,但是<code> displayName</code>為空。這是一個錯誤還是預期結果?我嘗試創建了一個新的Gmail帳戶,包括姓名和暱稱,但是<code>displayName</code>仍然為空。我該如何取得<code>displayName</code>? </p>
P粉328911308P粉328911308455 天前569

全部回覆(2)我來回復

  • P粉794851975

    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 中你可以取得顯示名稱。 希望這能幫助某人!

    回覆
    0
  • P粉073857911

    P粉0738579112023-09-05 00:03:58

    預設情況下,UserdisplayName屬性為空。它取決於使用者在建立或更新時是否設定了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

    回覆
    0
  • 取消回覆