我有一个网站,认证不是强制性的,无法使用该网站。
为了能够在未登录时保留用户数据,我在我的signInAnonymously()
中使用AppComponent
。
当用户想要注册网站时,我按照以下步骤操作:
但问题出在这里:一旦我拨打signInWithPopup()
,最后一个身份验证状态丢失,因为它是匿名状态,我无法再次登录。
因为匿名状态包含我不希望用户放松的数据,所以如果注册过程失败,我必须能够恢复到最后的匿名状态。
答案 0 :(得分:1)
我仍然不了解你的用例,但无论如何这里都有。 您在默认的App实例上匿名签名用户。
var app = firebase.initializeApp(config);
app.auth().signInAnonymously()....
然后使用相同的配置创建另一个Auth实例:
var appTemp = firebase.initializeApp(config, 'temp');
// Set persistence to none in case you forget to clear this.
appTemp.auth().setPersistence(firebase.auth.Auth.Persistence.NONE);
// Sign in the user with popup and save the credential.
var cred = null;
appTemp.auth().signInWithPopup(provider).then(function(result) {
cred = result.credential;
// Check the user email is registered in your DB.
return isRegistered(result.user.email);
}).then(function(registered) {
if (registered) {
// User is registered. Delete and relink to original anonymous.
return appTemp.auth().currentUser.delete().then(function() {
return app.auth().currentUser.linkWithCredential(cred);
});
} else {
// User not registered, just delete. The anonymous user remains.
return appTemp.auth().currentUser.delete();
}
})...
不确定这是否正是您想要的,但它会使用temp auth实例复制技术指向正确的方向。