Problem mit leerem displayName in Firebase beim Anmelden mit signInWithCredential
P粉328911308
P粉328911308 2023-09-04 09:43:01
0
2
563
<p>Ich verwende Google Login und der Nutzer wird aufgefordert, die E-Mail-Adresse und das Passwort für sein Google-Konto einzugeben: </p> <pre class="brush:php;toolbar:false;">const auth = getAuth(app); const userCredentials = Warten auf signInWithCredential( authentifizieren, GoogleAuthProvider.credential(null, token) ); console.log(userCredentials.user)</pre> <p>Ich habe das Benutzerobjekt erfolgreich erhalten, einschließlich <code>email</code>, <code>photoURL</code>, <code>uid</code>, aber <code> displayName</code> ist leer. Ist das ein Fehler oder ein erwartetes Ergebnis? Ich habe versucht, ein neues Gmail-Konto zu erstellen, einschließlich Name und Spitzname, aber <code>displayName</code> war noch leer. Wie erhalte ich <code>displayName</code>? </p>
P粉328911308
P粉328911308

Antworte allen(2)
P粉794851975

我找到了一个方法来“黑掉”关于无法从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粉073857911

默认情况下,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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage