Gagafeee
Gagafeee

Reputation: 21

Firebase .listUsers() is not function

I have been looking for some time, but without answers, so I ask my question:

I work with firebase and I make a function 'getAllUsers' (which must return all registered user uid) :

function getAllusers(nextPageToken){
    app.auth().listUsers(1000, nextPageToken)
    .then(function(listUsersResult) {
      listUsersResult.users.forEach(function(userRecord) {
        console.log('user', userRecord.toJSON());
      });
      if (listUsersResult.pageToken) {
        // List next batch of users.
        listAllUsers(listUsersResult.pageToken);
      }
    })
    .catch(function(error) {
      console.log('Error listing users:', error);
    });
}

(yes, this is the doc example)

but I get

Uncaught TypeError: app.auth is not a function

I tested :

I think this is my imports:


import { initializeApp } from "https://www.gstatic.com/firebasejs/9.6.7/firebase-app.js";
import { getAuth, signInWithPopup, createUserWithEmailAndPassword, signInWithEmailAndPassword, GoogleAuthProvider, signOut, getAdditionalUserInfo, reauthenticateWithCredential } from "https://www.gstatic.com/firebasejs/9.6.7/firebase-auth.js";
import { getDatabase, set, ref, update, child, onValue, get } from "https://www.gstatic.com/firebasejs/9.6.7/firebase-database.js";
import { getStorage, ref as sRef, uploadBytes, getDownloadURL, deleteObject } from "https://www.gstatic.com/firebasejs/9.6.7/firebase-storage.js";
const firebaseConfig = {
    apiKey: "XX",
    authDomain: "XX",
    databaseURL: "XX",
    projectId: "XX",
    storageBucket: "XX",
    messagingSenderId: "XX",
    appId: "XX",
    measurementId: "XX"
};

const app = initializeApp(firebaseConfig);
const database = getDatabase(app);
const auth = getAuth(app);
const storage = getStorage(app);

I am currently researching how to use 'admin' for this

Hoping someone can help me, I keep looking, thanks in advance

Upvotes: 2

Views: 750

Answers (1)

Frank van Puffelen
Frank van Puffelen

Reputation: 598728

The Firebase Admin SDK run code with elevated/administrative permissions and thus can only be used in a trusted environment, such as your development machine, a server that you control, or Cloud Functions/Cloud Run. They cannot be used in client-side application code, as that would be a security concern.

The regular Firebase SDKs only allow a user access to their own profile data, as doing otherwise on an SDK level would be a security concern.

If the application needs to show information about other users, you will have to build (and secure) that yourself on top of Firebase. The two most common options:

  • Implement the functionality in a custom server-side API that uses the Admin SDK and that you can call from your client-side application code. The custom server-side code you write should then ensure that only data that the caller is authorized to see is returned.
  • Have each user write to a cloud-hosted database (such as Firestore or the Realtime Database or Firebase), and then have other users read it from there. In this scenario you'll want to use Firebase's security rules to ensure each user can only access the data they're authorized for.

This topic has been covered frequently before, so I recommend also checking out:

Upvotes: 2

Related Questions