Firebase Auth将匿名身份验证用户与自定义身份验证用户

时间:2016-06-16 16:38:01

标签: authentication firebase credentials

所以我在这里看到:https://firebase.google.com/docs/auth/web/account-linking#link-auth-provider-credentials-to-a-user-account现在可以链接Firebase中的用户帐户了。我还看到Firebase提供了匿名身份验证的功能,它为用户创建了一个用户会话,没有任何凭据。

在我们的应用程序中,我们通常使用CustomAuthentication和Firebase,因为我们有自己的身份验证服务。这非常有效,我们可以在使用Firebase的系统之间使用相同的Auth系统,也可以使用不同的Auth系统。

现在我们已经到了想要利用Firebase的匿名身份验证的地步,允许用户在不注册的情况下使用应用程序,只需在登录后转移他们的详细信息。所以我认为帐户链接是什么我需要。但我找不到将匿名帐户与自定义身份验证帐户相关联的方法。 Firebase可以这样吗?

3 个答案:

答案 0 :(得分:7)

我也没有找到匿名和自定义signIns之间的链接,所以我只使用signInAnonymously并将它的uid传递给signInWithCustomToken。

第1步。 为了能够实现这一点,你应该从signInAnonymously函数中获取一个uid:

var uid;
auth().signInAnonymously().then(user => {
  uid = user.uid;
});

第2步。 保存当前用户数据,如下所示:

database().ref(`users/${uid}`).set({ some: 'data' });

第3步。 将此uid发送到返回自定义令牌的服务器。在您的服务器上,您只需将此uid传递给firebase.auth().createCustomToken(uid)函数并将此自定义令牌发回。它将包含uid。

第4步。 当您收到自定义令牌时,您可以使用以下方式登录:

auth().signInWithCustomToken(authKey);

就是这样。您已使用自定义令牌登录,并可以访问在步骤2中保存的匿名用户数据。

答案 1 :(得分:2)

我遇到了类似的问题,但我认为Firebase不允许这种类型的链接,因为它需要链接两个单独的firebase用户ID:自定义令牌创建用户的ID和匿名用户的ID。

说:

  

用户可以使用相同的Firebase用户ID进行识别,无论他们用于登录的身份验证提供程序如何。

因此处理两个用户ID之间的链接会导致不一致。

我通过合并两个帐户之间的数据解决了这个问题。

例如(来自Firebase文档):

.vimrc

答案 2 :(得分:-1)

警告:我从来没有这样做过。你看过this page了吗?在底部,标题为"电子邮件密码登录",它列出了此代码片段:

var credential = firebase.auth.EmailPasswordAuthProvider.credential(email, password);

然后,您可以(显然)链接凭证,如下所示:

auth.currentUser.link(credential).then(function(user) {
  console.log("Anonymous account successfully upgraded", user);
}, function(error) {
  console.log("Error upgrading anonymous account", error);
});