【发布时间】:2019-11-22 06:19:26
【问题描述】:
我正在尝试在用户元数据中设置一些属性。我正在尝试使用https://firebase.google.com/docs/auth/admin/manage-sessions#revoke_refresh_tokens 然后https://firebase.google.com/docs/auth/admin/manage-sessions#update_user-specific_metadata_in 来执行此操作。
可能我做错了什么,因为它不起作用。如果我像本文中那样这样做,然后调用 auth().listUsers 来获取用户数据,“元数据”只有默认属性:creationTime 和 lastSignInTime,但没有新属性 revokeTime,有什么想法吗?
编辑:
我的撤销功能:
export const revokeUsersToken = functions.https.onCall(async (req, res) => {
const admin = await import('firebase-admin');
if (!isRevokeUsersTokenInitialized) {
admin.initializeApp();
isRevokeUsersTokenInitialized = true;
}
return admin
.auth()
.revokeRefreshTokens(req.uid)
.then(() => {
return admin.auth().getUser(req.uid);
})
.then(userRecord => {
return new Date(userRecord.tokensValidAfterTime as string).getTime() / 1000;
})
.then(timestamp => {
const metadataRef = admin.database().ref('metadata/' + req.uid);
metadataRef.set({ revokeTime: timestamp }).then((x) => {
return `Database updated successfully: ${x}`;
}).catch(error => {
return `Error: ${error}`;
});
});
});
然后,当我尝试获取所有用户时:
export const getListUsers = functions.https.onCall(async (req, res) => {
const admin = await import('firebase-admin');
if (!isGetListUsersInitialized) {
admin.initializeApp();
isGetListUsersInitialized = true;
}
const maxResults = 100; // optional arg.
return admin
.auth()
.listUsers(maxResults)
.then(userRecords => {
return userRecords.users.map(user => {
const {
passwordHash,
passwordSalt,
phoneNumber,
photoURL,
providerData,
tokensValidAfterTime,
customClaims,
...us
} = user;
return {
...us,
role: customClaims && customClaims.hasOwnProperty('role') ? (customClaims as any).role : null
};
});
})
.catch(error => console.log(error));
});
如果我得到此用户列表,则没有关于新元数据属性的信息
【问题讨论】:
-
更好?抱歉,大部分代码都在 firebase 指南中;-)
-
我不清楚问题是什么。您共享的哪一行代码没有按照您的预期执行?它有什么作用?你期待什么?
-
我在谈论这个 -> metadataRef.set({ revokeTime: timestamp })。它不应该为用户元数据设置新属性('revokeTime')?如果我调用 .auth().listUsers 我不应该在“userRecords”响应中看到该新属性?
-
您正在将
revokeTime写入数据库,这与该用户的 Firebase 身份验证记录无关。
标签: javascript firebase firebase-authentication google-cloud-functions firebase-admin