Deseo obtener la lista de proyectos de Firebase de un usuario registrado (no yo) en mi sitio web. Parece que no puedo solicitar la API de reposo de firebase correctamente ( punto final ) ya que recibo un error 401 NO AUTENTICADO.
Los pasos que sigo:
Estoy usando firebase.auth().signInWithPopup en mi navegador para autenticar a los usuarios. Estos son los alcances utilizados:
// Google provider const provider = new GoogleAuthProvider(); // Additionnal scopes provider.addScope("https://www.googleapis.com/auth/cloud-platform"); provider.addScope("https://www.googleapis.com/auth/firebase"); provider.addScope("https://www.googleapis.com/auth/datastore"); // Signin signInWithPopup(auth, provider); Luego estoy usando el método getIdToken para obtener un token del usuario.
const token = await auth.currentUser.getIdToken(true);
Uso este token para solicitar https://firebase.googleapis.com/v1beta1/projects :
const data = await window.fetch("https://firebase.googleapis.com/v1beta1/projects", { headers: { authorization: `Bearer ${token}`, }, }) .then(res => res.json());pero siempre recibo un error 401:
{ "error": { "code": 401, "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "status": "UNAUTHENTICATED" } }¿Qué estoy haciendo mal?
Para obtener una lista de proyectos de Firebase para un usuario, necesita un token OAuth2 para un usuario que sea colaborador de los proyectos. Está intentando usar el token de ID/JWT para un usuario de autenticación de Firebase, que no es lo mismo.
Siga la documentación sobre cómo generar un token de acceso para obtener valor que puede usar para obtener una lista de proyectos.
Acabo de encontrar la respuesta, el SDK de firebase te da un token de acceso con el idToken. Luego puede usar este token en lugar del idToken para cualquiera de sus necesidades de API REST.
const result = await signInWithPopup(auth, provider); // This gives you a Google Access Token. You can use it to access the Google API. const credential = GoogleAuthProvider.credentialFromResult(result);