programing

Firebase에서 특정 사용자 삭제

megabox 2023. 6. 28. 21:35
반응형

Firebase에서 특정 사용자 삭제

파이어베이스에서 특정 사용자 계정을 가져온 다음 삭제할 수 있는 방법이 있습니까?

예를 들어:

// I need a means of getting a specific auth user.
var user = firebase.auth().getUser(uid);
// Note the getUser function is not an actual function.

그런 다음 해당 사용자와 해당 사용자의 추가 데이터를 삭제합니다.

// This works
user.delete().then(function() {
   // User deleted.
   var ref = firebase.database().ref(
      "users/".concat(user.uid, "/")
   );
   ref.remove();
});

Firebase Documentation에 따르면 사용자가 현재 로그인한 경우 다음을 삭제할 수 있습니다.

firebase.auth().currentUser.delete()

로그인한 admin 사용자가 시스템에서 다른 사용자를 삭제할 수 있도록 하는 것이 제 목표입니다.

Firebase 인증에 클라이언트 측 SDK를 사용하는 경우 현재 로그인되어 있는 사용자 계정만 삭제할 수 있습니다.다른 모든 것은 앱 사용자가 서로의 계정을 삭제할 수 있기 때문에 보안 위험이 큽니다.

Firebase 인증용 관리 SDK는 개발 시스템, 사용자가 제어하는 서버 또는 클라우드 기능과 같은 신뢰할 수 있는 환경에서 사용하도록 설계되었습니다.신뢰할 수 있는 환경에서 실행되므로 UID만 알고 사용자 계정을 삭제하는 등 클라이언트 측 SDK가 수행할 수 없는 특정 작업을 수행할 수 있습니다.

참고:


또 다른 일반적인 접근 방식은 Firebase Database와 같이 허용 목록/차단 목록을 유지하고 이를 기반으로 사용자에게 권한을 부여하는 것입니다.Firebase 3.x에서 등록을 비활성화하는 방법을 참조하십시오.

Ali Haider가 제안한 것처럼 응용 프로그램 자체에서 firebase-admin을 사용하고 싶지 않을 것입니다. 코드와 함께 배포하지 않을 개인 키가 필요하기 때문입니다.

그러나 Firestore 또는 Realtime 데이터베이스에서 사용자를 삭제할 때 트리거하는 Cloud Function을 Firebase에서 생성하고 Cloud Function이 firebase-admin을 사용하여 사용자를 삭제하도록 할 수 있습니다.저의 경우 Firestore에 Firebase Auth에서 생성한 것과 동일한 사용자 ID를 가진 사용자 컬렉션이 있으며, 여기서 이름과 역할 등과 같은 추가 사용자 데이터를 저장합니다.

저처럼 파이어스토어를 사용하는 경우 다음을 수행할 수 있습니다.실시간 데이터베이스를 사용하는 경우에는 문서에서 트리거를 사용하는 방법을 찾아보십시오.

  1. Firebase 프로젝트에 클라우드 기능이 초기화되었는지 확인합니다.프로젝트 디렉터리에 'functions'라는 이름의 폴더가 있어야 합니다.않은 : 다음합니다.firebase init functions.

  2. 다음 페이지의 Firebase 콘솔에서 서비스 계정의 개인 키를 얻습니다.설정 > 서비스 계정.

  3. 개인 키가 포함된 json 파일을 다음에 배치합니다.functions\srcindex.ts 파일 옆에 있는 폴더입니다.

  4. index.ts에서 다음 함수를 내보냅니다.

export const removeUser = functions.firestore.document("/users/{uid}")
    .onDelete((snapshot, context) => {        
        const serviceAccount = require('path/to/serviceAccountKey.json');
        admin.initializeApp({
            credential: admin.credential.cert(serviceAccount),
            databaseURL: "https://<DATABASE_NAME>>.firebaseio.com"
        });
        return admin.auth().deleteUser(context.params.uid);
    });
  1. 이제 다음 명령을 사용하여 클라우드 기능 구축firebase deploy --only functions

Firebase Firestore에서 사용자가 삭제되면 이 코드가 실행되고 Firebase Auth에서도 사용자가 삭제됩니다.

Firebase Cloud Functions에 대한 자세한 내용은 https://firebase.google.com/docs/functions/get-started 를 참조하십시오.

인증을 수행한 것과 동일한 방식으로 이 코드를 적용하면 됩니다.

var user = firebase.auth().currentUser;

user.delete().then(function() {
  // User deleted.
}).catch(function(error) {
  // An error happened.
});

Javascript API 사용(admin SDK가 아님)

답변이 사용자 로그인에 대해 지적하는 처럼 로그인한 사용자가 아닌 다른 사용자를 삭제할 수 있도록 두 번째 앱을 만들어야 합니다.

제가 한 일은 다음과 같습니다.

  async deleteUser (user) {
    // Need to create a second app to delete another user in Firebase auth list than the logged in one.
    // https://stackoverflow.com/a/38013551/2012407
    const secondaryApp = firebase.initializeApp(config, 'Secondary')

    if (!user.email || !user.password) {
      return console.warn('Missing email or password to delete the user.')
    }

    await secondaryApp.auth().signInWithEmailAndPassword(user.email, user.password)
      .then(() => {
        const userInFirebaseAuth = secondaryApp.auth().currentUser
        userInFirebaseAuth.delete() // Delete the user in Firebase auth list (has to be logged in).
        secondaryApp.auth().signOut()
        secondaryApp.delete()

        // Then you can delete the user from the users collection if you have one.
      })
  }

현재 사용자를 삭제하려는 경우 Firebase 9+에 대한 간단한 솔루션은 다음과 같습니다.

import { getAuth, deleteUser } from "firebase/auth";

const auth = getAuth();
const user = auth.currentUser;

deleteUser(user).then(() => {
  // User deleted.
}).catch((error) => {
  // An error ocurred
  // ...
});

Firebase Admin SDK 없이도 특정 사용자를 삭제할 수 있다고 생각합니다.관리할 계정의 사용자 이름, 암호를 저장해야 합니다.그리고 계정으로 로그인 - 관리자 계정을 선언합니다.그 후에는 Firebase auth를 사용하여 로그아웃 -> 삭제할 계정으로 로그인 -> Firebase auth를 사용하여 해당 계정을 삭제 -> Firebase auth를 사용하여 로그아웃 -> 해당 "관리자 계정"으로 다시 로그인하는 단계만 수행합니다.이 솔루션을 통해 Firebase Admin SDK를 사용하지 않고 계정을 삭제할 수 있기를 바랍니다.

언급URL : https://stackoverflow.com/questions/38800414/delete-a-specific-user-from-firebase

반응형