javascript - Firebase Auth(javascript):链接帐户时出现“TypeError:user.delete 不是函数”
问题描述
我正在尝试将匿名 firebase 帐户与提供者帐户相关联,并且我正在使用从此处的文档中复制的以下 javascript 代码: https ://firebase.google.com/docs/auth/web/account -链接
这是我正在使用的确切代码:
function mergeAccounts(credential){
console.log("merging guest account with provider account");
var auth = firebase.auth();
// Get reference to the currently signed-in user
var prevUser = auth.currentUser;
// Sign in user with another account
auth.signInAndRetrieveDataWithCredential(credential).then(function(user) {
console.log("Sign In Success", user);
var currentUser = user;
// Merge prevUser and currentUser data stored in Firebase.
// Note: How you handle this is specific to your application
// After data is migrated delete the duplicate user
return user.delete().then(function() {
// Link the OAuth Credential to original account
return prevUser.linkAndRetrieveDataWithCredential(credential);
}).then(function() {
// Sign in with the newly linked credential
return auth.signInAndRetrieveDataWithCredential(credential);
});
}).catch(function(error) {
console.log("Sign In Error", error);
});
}
当我以匿名用户身份登录firebase,然后尝试使用我的google帐户登录时,上面的代码成功地用google登录了我(该行console.log("Sign In Success", user);
按预期工作并在控制台中向我显示了用户详细信息。但我随后得到一个错误,它说Sign In Error TypeError: user.delete is not a function at 16login.js:212
which 指的是有return user.delete().then(function() {
我使用的文档和代码片段似乎表明这delete()
是一个函数user
,所以我对它为什么会抛出这个错误感到有点困惑。
非常感谢任何帮助-谢谢。
解决方案
您正在使用该signInAndRetrieveDataWithCredential
方法,而不是signInWithCredential
,因此返回值是一个UserCredential
对象。您需要user
通过user
回调函数的返回属性的属性来访问:
auth.signInAndRetrieveDataWithCredential(credential).then(function(userCredential) {
const user = userCredential.user; // HERE
console.log("Sign In Success", user);
var currentUser = user;
// Merge prevUser and currentUser data stored in Firebase.
// Note: How you handle this is specific to your application
// After data is migrated delete the duplicate user
return user.delete().then(function() {
// Link the OAuth Credential to original account
return prevUser.linkAndRetrieveDataWithCredential(credential);
}).then(function() {
// Sign in with the newly linked credential
return auth.signInAndRetrieveDataWithCredential(credential);
});
}).catch(function(error) {
console.log("Sign In Error", error);
});
推荐阅读
- java - 用于计算单词数组中单词出现次数的循环
- jquery - 为什么 ajax.stop 不止一次有效
- php - 这个在 PHP 中叫什么名字?
- python - Selenium Chrome 获取文本在无头模式下不起作用
- c - gdb 似乎在没有循环的情况下运行了两次代码行
- python - 构建感知器时原子问题
- ruby - 为什么 `[:-\\]` 匹配 `?` ?红宝石正则表达式
- react-native - 反应原生嵌套导航 - 单击父抽屉路径时返回堆栈导航器的初始路径
- r - 使用 gganimate 重复打印
- javascript - Google 应用脚本(java 脚本)和加密货币数据