可以通过 Admin SDK 实现
Admin SDK 不能在客户端上使用,只能在 Firebase Cloud Functions 中使用,然后您可以从客户端调用它。您将获得以下承诺:(这真的很容易设置云功能 https://firebase.google.com/docs/functions/get-started.)
admin.auth().getUser(uid)
admin.auth().getUserByEmail(email)
admin.auth().getUserByPhoneNumber(phoneNumber)
看这里https://firebase.google.com/docs/auth/admin/manage-users#retrieve_user_data https://firebase.google.com/docs/auth/admin/manage-users#retrieve_user_data
简而言之,这就是您正在寻找的
admin.auth().getUser(data.uid)
.then(userRecord => resolve(userRecord.toJSON().email))
.catch(error => reject({status: 'error', code: 500, error}))
完整片段
在下面的代码中,我首先通过检查调用此函数的用户的 uid 是否在该节点下来验证他是否有权显示有关任何人的此类敏感信息userRights/admin
.
export const getUser = functions.https.onCall((data, context) => {
if (!context.auth) return {status: 'error', code: 401, message: 'Not signed in'}
return new Promise((resolve, reject) => {
// verify user's rights
admin.database().ref('userRights/admin').child(context.auth.uid).once('value', snapshot => {
if (snapshot.val() === true) {
// query user data
admin.auth().getUser(data.uid)
.then(userRecord => {
resolve(userRecord.toJSON()) // WARNING! Filter the json first, it contains password hash!
})
.catch(error => {
console.error('Error fetching user data:', error)
reject({status: 'error', code: 500, error})
})
} else {
reject({status: 'error', code: 403, message: 'Forbidden'})
}
})
})
})
顺便说一句,请阅读以下内容之间的区别onCall()
and onRequest()
here https://stackoverflow.com/questions/51066434/firebase-cloud-functions-difference-between-onrequest-and-oncall.