gpt4 book ai didi

javascript - Firebase 匿名用户升级后

转载 作者:行者123 更新时间:2023-12-02 21:10:43 26 4
gpt4 key购买 nike

我正在实现一个工作流程,其中每个使用我的应用的用户在登录/注册(电子邮件或 Google)之前都是匿名用户。

注册,非常简单:我使用linkWithPopup

但是,我在用户登录时遇到了一些问题:我尝试链接它们,如果收到 auth/credential-already-in-use 错误(如果用户升级一次,注销然后尝试再次登录,就会发生这种情况),我让他们登录。

firebase.auth().currentUser.linkWithPopup(provider).then(function (result) {
var token = result.credential.accessToken;
// The signed-in user info.
var user = result.user;
// ...
}).catch(function (error) {
// Handle Errors here.
var errorCode = error.code;
if (errorCode === 'auth/credential-already-in-use') {
return firebase.auth().signInWithCredential(error.credential);
}
}).then((result) => {
return dispatch(loadContent(result.user.uid))
}).then(() => {
history.push('/');
});

上面的代码运行得很好,而且比我自己完成这一切要少麻烦。

但是,如果用户登录,如何删除创建的孤立用户?

我尝试引用旧的无用匿名用户,并在用户登录后将其删除(因此更改了其帐户),但它显然不起作用,因为帐户已更改如果用户可以删除另一个,这将是一个很大的安全缺陷......

我对 Firebase 生态系统不太熟悉,我应该如何处理?我是否需要结合使用 Firebase Cloud FunctionFirebase Admin SDK 或者是否有解决此问题的标准方法?

最佳答案

这很简单。即使用户不是当前用户,用户上的 API 也会继续工作。

const anonymousUser = firebase.auth().currentUser;
firebase.auth().currentUser.linkWithPopup(provider)
.then(function (result) {
var token = result.credential.accessToken;
// The signed-in user info.
var user = result.user;
// ...
}).catch(function (error) {
// Handle Errors here.
var errorCode = error.code;
if (errorCode === 'auth/credential-already-in-use') {
return firebase.auth().signInWithCredential(error.credential);
}
}).then((result) => {
if (anonymousUser.uid !== result.user.uid) {
return anonymousUser.delete()
.then(() => {
return result;
});
}
return result;
}).then((result) => {
return dispatch(loadContent(result.user.uid))
}).then(() => {
history.push('/');
});

关于javascript - Firebase 匿名用户升级后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61109905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com