Rumah  >  Soal Jawab  >  teks badan

Isu dengan displayName kosong dalam Firebase apabila log masuk menggunakan signInWithCredential

<p>Saya menggunakan Log Masuk Google dan pengguna digesa untuk memasukkan e-mel dan kata laluan akaun Google mereka: </p> <pre class="brush:php;toolbar:false;">const auth = getAuth(app); const userCredentials = tunggu signInWithCredential( kebenaran, GoogleAuthProvider.credential(null, token) ); console.log(userCredentials.user)</pre> <p>Saya berjaya memperoleh objek pengguna, termasuk <kod>e-mel</kod>, <kod>photoURL</kod>, <kod>uid</kod> displayName</code> Adakah ini pepijat atau hasil yang dijangkakan? Saya cuba membuat akaun Gmail baharu, termasuk nama dan nama panggilan, tetapi <kod>displayName</code> Bagaimanakah saya boleh mendapatkan <code>displayName</code>? </p>
P粉328911308P粉328911308381 hari yang lalu520

membalas semua(2)saya akan balas

  • P粉794851975

    P粉7948519752023-09-05 00:52:04

    Saya menemui cara untuk "menggodam" objek yang tidak boleh diakses daripada signInWithCredential获取displayName的问题。显然,正如之前所说的,displayName始终为null。但是,如果你使用google_sign_in库进行登录并检查GoogleSignInAccount dan anda akan melihat bahawa anda akan mempunyai nama paparan itu. Anda kemudian boleh log masuk ke Firebase menggunakan bukti kelayakan log masuk Google yang anda gunakan sebelum ini. Inilah kod yang saya gunakan:

    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);
        }

    Dalam user变量中,你将拥有来自firebase身份验证的所有与用户相关的变量,例如uid,而从googleSignInAccount anda boleh mendapatkan nama paparan. Harap ini membantu seseorang!

    balas
    0
  • P粉073857911

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

    Secara lalai, UserdisplayName属性为空。它取决于用户在创建或更新时是否设置了displayName。但默认情况下它是null.

    Jika anda ingin mengemas kini di suatu tempat 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);

    Jika anda pasti anda mempunyai displayName,但在user.displayName中没有显示出来,那么你需要检查你传递给GoogleAuthProvider.credential()方法的idToken是否为null,确保你也传递了有效的idToken dalam akaun Google anda.

    balas
    0
  • Batalbalas