Как получить доступ к firebase auth userMetadata

#reactjs #firebase #firebase-authentication

#reactjs #firebase #firebase-аутентификация

Вопрос:

Я пытаюсь найти способ получить доступ к CreationTime и lastSignInTime, описанным в этой документации.

Есть ли какие-либо примеры его использования в react hooks?

Я не могу понять документацию firebase в целом — это просто слова на странице. Я думаю, что он предназначен для людей, которые интуитивно знают, как заполнить пробелы. Я по-прежнему озадачен тем, как это сделать в целом.

Я могу получить доступ к auth.user.email, используя перехват реакции следующим образом:

 import React, { useState, useEffect, useContext, createContext } from "react";
import firebase  from "../firebase";
import {auth} from "../firebase";


const authContext = createContext();

// Provider wraps app and makes auth object available by useAuth().
export function ProvideAuth({ children }) {
  const auth = useProvideAuth();
  return <authContext.Provider value={auth}>{children}</authContext.Provider>;
}

// Hook to get the auth 
export const useAuth = () => {
  return useContext(authContext);
};

// Provider hook that creates auth state
function useProvideAuth() {
  const [user, setUser] = useState(null);
  
  
  const signin = (email, password) => {
    return firebase
      .auth()
      .signInWithEmailAndPassword(email, password)
      .then(response => {
        setUser(response.user);
        return response.user;
      });
  };

  const signup = (email, password) => {
    return firebase
      .auth()
      .createUserWithEmailAndPassword(email, password)
      .then(response => {
        setUser(response.user);
        return response.user;
      });
  };

  const signout = () => {
    return firebase
      .auth()
      .signOut()
      .then(() => {
        setUser(false);
      });
  };

  const sendPasswordResetEmail = email => {
    return firebase
      .auth()
      .sendPasswordResetEmail(email)
      .then(() => {
        return true;
      });
  };

  const confirmPasswordReset = (code, password) => {
    return firebase
      .auth()
      .confirmPasswordReset(code, password)
      .then(() => {
        return true;
      });
  };

  
  useEffect(() => {
    const unsubscribe = firebase.auth().onAuthStateChanged(user => {
      if (user) {
        setUser(user);
      } else {
        setUser(false);
      }
    });

    
    return () => unsubscribe();
  }, []);
  
  return {
    user,
    signin,
    signup,
    signout,
    sendPasswordResetEmail,
    confirmPasswordReset
  };
}
  

Теперь я пытаюсь выяснить, что мне нужно сделать, чтобы либо получить доступ к строковым значениям, описанным здесь, либо к временным меткам, описанным здесь.

Я попробовал каждый из (все догадки):

  {auth.user.UserMetadata().creationTime}

 {auth.user.creationTime}

 {auth.user.UserMetadata.creationTime}
  

Ответ №1:

Это работает.

                             {auth.user.metadata.creationTime}
  

Я не понимаю, почему. Ссылки в документации firebase относятся к метаданным как UserMetadata. Я не знаю, как найти часть информации, которая подсказывает людям совершать скачок между UserMetadata и метаданными.

Если кто-нибудь знает, в чем ключ к этому, я был бы вечно благодарен за понимание.

Комментарии:

1. Свойство вызывается metadata , его тип UserMetadata . Смотрите firebase.google.com/docs/reference/js/firebase.User#metadata