Dan*_* P. 12 javascript firebase
是否可以以编程方式在 Firebase 中更改用户的 UID?似乎无法在 Firebase 的控制台中手动执行此操作。
TL;DR:如果您需要指定 UID,则需要使用该 UID 创建一个新用户。
您不能直接更改 UID,但我可以使用 firebase 管理 API ( docs )一起破解某些内容
我的用例是我需要更改用户的电子邮件地址。我尝试使用"Update a User"更新电子邮件,但这实际上最终改变了引擎盖下的 UID。在我的应用程序中,UID 与很多东西相关联,我必须对架构进行巨大的更改,所以这不是一个选项。
我使用 API 执行此操作的一般方法是:
admin.auth().getUserByEmailadmin.auth().deleteUseradmin.auth().createUser使用getUserByEmail上面调用中的相关数据创建一个新用户,用新电子邮件替换电子邮件地址。与 不同admin.auth().updateUser,createUser实际上允许您指定 UID。
基于RoccoB 的回答,以下是更改用户 UID 的完整说明:
npm init使用默认值运行。npm install firebase-admin。UpdateUserUID.js使用以下代码创建一个 NodeJS 脚本文件(例如):let admin = require("firebase-admin");
// config
let email = "XXX";
let serviceAccountData = require("XXX.json");
let adminConfig = {
credential: admin.credential.cert(serviceAccountData),
databaseURL: "https://XXX.firebaseio.com",
};
let newUserOverrides = {
uid: "XXX",
};
Start();
async function Start() {
console.log("Initializing firebase. databaseURL:", adminConfig.databaseURL);
admin.initializeApp(adminConfig);
console.log("Starting update for user with email:", email);
let oldUser = await admin.auth().getUserByEmail(email);
console.log("Old user found:", oldUser);
await admin.auth().deleteUser(oldUser.uid);
console.log("Old user deleted.");
let dataToTransfer_keys = ["disabled", "displayName", "email", "emailVerified", "phoneNumber", "photoURL", "uid"];
let newUserData = {};
for (let key of dataToTransfer_keys) {
newUserData[key] = oldUser[key];
}
Object.assign(newUserData, newUserOverrides);
console.log("New user data ready: ", newUserData);
let newUser = await admin.auth().createUser(newUserData);
console.log("New user created: ", newUser);
}
Run Code Online (Sandbox Code Playgroud)
email和adminConfig.databaseURL。newUserOverrides.uid为所需的新 uid。(您也可以更改其他一些字段)serviceAccountData变量的导入以指向上一步中的关键 json 文件。node ./UpdateUserUID.js。| 归档时间: |
|
| 查看次数: |
6079 次 |
| 最近记录: |