Das Backend wird basierend auf der Registrierung einer Firebase-Plattform eines Drittanbieters implementiert

Das Backend wird basierend auf der Registrierung einer Firebase-Plattform eines Drittanbieters implementiert

Vorwort:

Die aktuelle Anmeldung und Registrierung für ausländische Apps oder Websites unterstützt im Allgemeinen Konten von Drittanbietern wie Google, Facebook, Apple usw. Es kommt vor, dass Firebase die Integration dieser gängigen Authentifizierungen für soziale Plattformen unterstützt und Front-End- und Back-End-SDKs bereitstellt , was zum Andocken sehr praktisch ist. Im Folgenden wird der einfache Anmelde- und Registrierungsprozess vorgestellt.

erreichen:

  1. Registrieren Sie ein Google-Konto, um den Firebase-Hintergrund aufzurufen und ein Projekt zu erstellenFügen Sie hier eine Bildbeschreibung ein

  2. Erstellen Sie eine Anwendung im Rahmen des Projekts, optional entsprechend der tatsächlichen Situation, Android, iOS, Webtyp.Fügen Sie hier eine Bildbeschreibung ein

  3. Klicken Sie auf das Dienstkonto, um die private Backend-Schlüsseldatei zu generieren und zu speichernFügen Sie hier eine Bildbeschreibung ein

  4. Implementieren Sie einfach eine Tool-Klasse:
    Abhängigkeit:

    <dependency>
      <groupId>com.google.firebase</groupId>
      <artifactId>firebase-admin</artifactId>
      <version>8.1.0</version>
    </dependency>
    
    package com.example.demo.utils;
    
    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.firebase.FirebaseApp;
    import com.google.firebase.FirebaseOptions;
    import com.google.firebase.auth.FirebaseAuth;
    import com.google.firebase.auth.FirebaseAuthException;
    import com.google.firebase.auth.UserRecord;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    
    
    public class FirebaseAuthUtils {
          
          
        private static final Logger log = LoggerFactory.getLogger(FirebaseAuthUtils.class);
    
        static {
          
          
            try {
          
          
                FirebaseOptions options = null;
                FileInputStream serviceAccount =
                        new FileInputStream("path/to/serviceAccountKey.json");
                options = FirebaseOptions.builder()
                        .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                        .build();
                FirebaseApp.initializeApp(options);
            } catch (IOException e) {
          
          
               log.error(e.getMessage(), e);
            }
        }
    
        /**
         * 验证登录token
         *
         * @param idToken
         * @return
         */
        public static String verifyIdToken(String idToken) {
          
          
            String uid = null;
            try {
          
          
                uid = FirebaseAuth.getInstance().verifyIdToken(idToken).getUid();
            } catch (FirebaseAuthException e) {
          
          
                log.error(e.getMessage(), e);
            }
            return uid;
        }
    
    
        /**
         * 获取用户基本信息
         *
         * @param uid
         * @return
         */
        public static UserRecord getUserById(String uid) {
          
          
            UserRecord userRecord = null;
            try {
          
          
                userRecord = FirebaseAuth.getInstance().getUser(uid);
            } catch (FirebaseAuthException e) {
          
          
                log.error(e.getMessage(), e);
            }
            return userRecord;
        }
    
    }
    
    
  5. Zeichnen Sie einfach ein Zeitdiagramm
    Fügen Sie hier eine Bildbeschreibung ein

  6. Das Folgende ist ein Beispiel für eine Anfrage:
    Ich führe lokal ein reines Front-End-Authentifizierungsprojekt aus . Nachdem ich es ausgeführt habe, kann ich mich bei der browserseitigen Schnittstellenanforderung anmelden, um das erhaltene idToken anzuzeigen. Nachdem ich es erhalten habe, stelle ich fest, dass es so ist Ein Inhalt im JWT-Format, der direkt dekodiert werden kann. Es wird jedoch empfohlen, das verifyIdToken der oben genannten Toolklasse aufzurufen, um die Benutzer-ID abzurufen und so zu verhindern, dass Daten manipuliert werden. Überprüfen Sie nach dem Abrufen der UID, ob der Benutzer existiert.
    Fügen Sie hier eine Bildbeschreibung ein
    7. UserRecord-Klasse

    public class UserRecord implements UserInfo {
          
          
    
      private static final String PROVIDER_ID = "firebase";
      private static final Map<String, String> REMOVABLE_FIELDS = ImmutableMap.of(
          "displayName", "DISPLAY_NAME",
          "photoUrl", "PHOTO_URL");
      static final String CUSTOM_ATTRIBUTES = "customAttributes";
      private static final int MAX_CLAIMS_PAYLOAD_SIZE = 1000;
    
      private final String uid;
      private final String tenantId;
      private final String email;
      private final String phoneNumber;
      private final boolean emailVerified;
      private final String displayName;
      private final String photoUrl;
      private final boolean disabled;
      private final ProviderUserInfo[] providers;
      private final long tokensValidAfterTimestamp;
      private final UserMetadata userMetadata;
      private final Map<String, Object> customClaims;
    }  
    

    Dies ist die Benutzerklasse, die mit dem SDK geliefert wird. Der Hauptzweck dieser Klasse besteht darin, die Kontoinformationen von Drittanbietern wie E-Mail, Mobiltelefon, Avatar usw. des Benutzers abzurufen.

wichtiger Punkt:

  1. Dasselbe Konto ist an mehrere Plattformen gebunden, zum Beispiel: Um Google- und Facebook-Konten gleichzeitig zu binden, muss es im Hintergrund von Firebase betrieben werden. Nach dem Öffnen dieser Option ist das E-Mail- Fügen Sie hier eine Bildbeschreibung einFeld der UserRecord-Klasse möglicherweise leer. welches aus dem Provider-Array bezogen werden muss

  2. Über das Avatar-PhotoUrl-Feld kann das Miniaturbild abgerufen werden. Dies liegt daran, dass die Avatar-Adresse jeder Plattform über einen Miniaturbild-Parameter verfügt. Im Folgenden wird eine Methode für Google und Facebook vorgestellt, um das Originalbild abzurufen und den Miniaturbild-Parameter zu ersetzen:

    UserRecord user = FirebaseAuthUtils.getUserById(uid);
    // 谷歌
    String path = user.getPhotoUrl().replace("s96-c", "s500-c");
    // facebook
    String concat = registerDTO.getPhotoUrl().indexOf("?") > 0 ? "&" : "?";
    path = user.getPhotoUrl()+ concat + "type=large");
    
    

Ich denke du magst

Origin blog.csdn.net/Arhhhhhhh/article/details/132609027
Empfohlen
Rangfolge