Firebase 사용자 관리

GonnabeAlright·2022년 1월 9일
0
post-thumbnail

Firebase Admin SDK에서 제공하는 API를 활용하면 더 많은 권한으로 Firebase 인증 사용자를 관리할 수 있습니다. 관리자 사용자 관리 API를 사용하면 안전한 서버 환경에서 프로그래머틱 방식으로 다음과 같은 작업을 완료할 수 있습니다.

  • 제한 또는 비율 제한 없이 새 사용자 생성
  • uid, 이메일, 전화번호 등 여러 기준으로 사용자 조회
  • 지정된 프로젝트에 속한 모든 사용자를 배치별로 나열
  • 계정 생성 날짜 및 마지막으로 로그인한 날짜 등 사용자 메타데이터 액세스
  • 기존 시용자 비밀번호를 입력하지 않고 사용자 삭제
  • 사용자로 로그인하지 않고 비밀번호 등 사용자 속성 업데이트
  • 비밀번호를 확인하기 위한 대역 외 작업 흐름을 거치지 않고 이메일 확인
  • 변경사항을 취소하기 위한 이메일 링크를 보내지 않고 사용자 이메일 변경
  • SMS 확인 흐름을 거치지 않고 전화번호로 새 사용자 생성
  • SMS 확인 흐름을 거치지 않고 사용자의 전화번호 변경
  • 중지 상태에서 오프라인으로 사용자 프로비저닝한 후 사용자를 설정할 시기를 나중에 제어
  • 특정 애플리케이션의 사용자 관리 시스템에 맞는 커스텀 사용자 콘솔 빌드

사용자 데이터 검색 (uid)

getAuth().getUser(uid).then(userRecord => {
	console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
}).catch(error => {
	console.log(`Error fetching user data: ${error}`);
});
  • 제공된 uid가 기존 사용자에게 속하지 않거나 기타 이유로 사용자를 가져올 수 없는 경우 위 메서드에서 오류가 발생.
  • 사용자의 uid 대신 사용자의 이메일이 있을 수도 있다. Firebase Admin SDK는 이메일로 사용자 정보를 조회하는 기능을 지원

사용자 데이터 검색 (email)

getAuth().getUserByEmail(email).then(userRecord => {
	console.log(`Successfully fetched user data: ${userRecord.toJSON()}`)'
}).catch(error => {
	console.log(`Error fetching user data: ${error}`);
})
  • 이메일 조회에서는 기본(최상위 수준) 이메일만 검색할 수 있고 제공업체별 이메일을 검색할 수 없습니다.

사용자 데이터 검색 (phoneNumber)

getAuth().getUserByPhoneNumber(phonenumber).then(userRecord => {
	console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
}).catch(error => {
	console.log(`Error fetching user data: ${error}`);
})

사용자 데이터 일괄 검색 (호출 1번당 최대 100개)

getAuth().getUsers([{ uid: 'uid1' }, { email: 'user2@example.com' }, { phoneNumber: '+155555020' }, { providerId: 'google.com', providerUid: 'google_uid4' }])
.then((getUsersResult) => {
  console.log(`Successfully fetched user data: `);
  getUsersResult.users.forEach((userRecord) => {
    console.log(userRecord);
  })
  console.log(`Unable to find users corresponding to these identifiers:`);
  getUsersResult.notFound.forEach((userIdentifier) => {
    console.log(userIdentifier);
  })
}).catch((error) => {
  console.log(`Error fetching user data: `, error);
})

사용자 생성하기

createUser 지원속성
@param {Object}
@param {string} Object.uid
@param {string} Object.email
@param {boolean} Object.emailVerified
@param {string} Object.phoneNumber
@param {string} Object.displayName
@param {string} Object.photoURL
@param {boolean} Object.disabled

getAuth().createUser({ email: 'user@example.com', emailVerified: false, phoneNumber: '+112324121', password: 'secretPassword', displayName: 'John Doe', photoURL:  'http://www.example.com/12345678/photo.png', disabled: false }).then(userRecord => {
	console.log('Successfully created new user:', userRecord.uid);
}).catch(error => {
	console.log('Error creating new user:', error);
})

사용자 업데이트 (업데이트할 사용자 속성과 함께 해당 사용자의 uid를 지정)

updateUser 지원속성
@param {Object}
@param {string} Object.email
@param {boolean} Object.emailVerified
@param {string} Object.phoneNumber
@param {string} Object.password
@param {string || null} Object.displayName
@param {string || null} Object.photoURL
@param {boolean} Object.disabled

getAuth().updateUser(uid, { email: '', phoneNumber: '', emailVerified: true, password: '', displayName: '', photoURL: '', disabled: true }).then(userRecord => {
	console.log('Successfully updated user', userRecord.toJSON());
}).catch(error => {
	console.log('Error updating user:', error);
})

사용자 삭제

getAuth().deleteUser(uid).then(() => {
	console.log(`Successfully deleted user`);
}).catch(error => {
	console.log('Error deleting user:', error);
})

여러 사용자 삭제

getAuth().deleteUsers([uid1, uid2, uid3]).then(deleteUsersResult => {
    console.log(`Successfully deleted ${deleteUsersResult.successCount} users`);
    console.log(`Failed to delete ${deleteUsers.failureCount} users`);
    deleteUsersResult.errors.forEach(err => {
    	console.log(err.error.toJSON());
    })
}).catch(error => {
	console.log('Error deleteing users:', error);
})

모든 사용자 나열

maxResults 필드를 지정하지 않으면 기본적으로 배치당 사용자 1,000명 포함
pageToken를 지정하지 않으면 맨 처음 사용자부터 uid순으로 나열

const listAllUsers = (nextPageToken) => {
	getAuth().listUsers(1000, nextPageToken).then(listUsersList => {
    	listUsersResult.users.forEach(userRecord => {
        	console.log('user', userRecord.toJSON());
        });
        if(listUsersReulst.pageToken) listAllUsers(listUsersResult.pageToken);
    }).catch(error => {
    	console.log('Error listing users:', error);
    })
}
listAllUsers();

0개의 댓글