【问题标题】:what should I do if I want a logged out user still can access the content anonymously using firebase authentication?如果我希望注销的用户仍然可以使用 Firebase 身份验证匿名访问内容,我该怎么办?
【发布时间】:2020-09-10 05:23:01
【问题描述】:

所以我想让新用户在决定实际登录之前可以在我的应用中看到一些内容。

我需要在新用户登录之前为他们实现sign in anonymously,因为在我的firebase安全规则中,有一个规则状态,用户必须像这样登录

function isSignedIn() {
      return request.auth != null;
}

1) 首先,安装应用程序后,一个新用户来了,然后使用下面的代码匿名登录,假设这个匿名用户的用户 ID 是 A1a2A3a4A5a6A7

Auth.auth().signInAnonymously() { (authResult, error) in
   // create anonymous user wih uid == A1a2A3a4A5a6A7
}

2) 然后这个用户决定使用真实的电子邮件登录,不再是匿名的,使用谷歌帐户,然后我使用下面的代码链接它。现在用户 A1a2A3a4A5a6A7 登录提供者已成为谷歌帐户

let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)

 Auth.auth().signIn(with: credential) { (user, error) in 
     // A1a2A3a4A5a6A7 is now using google account as the provider
 }

3) 然后该用户使用以下代码执行注销:

GIDSignIn.sharedInstance().signOut()

这就是问题.....

为了让这个用户仍然可以看到我的应用程序中的一些内容,我必须让这个用户重新登录,对吗?

那么我应该为这个已注销的注册用户做什么?

我必须再次执行 signAnonymously 吗?但这会创建一个新的不同用户 ID 对吗?我担心如果创建了新的用户 ID,它会造成双重帐户。

或者我可以将注册用户身份验证提供商从使用谷歌帐户登录更改为匿名。为了保持用户ID相同。

不知道有没有更好的办法,怎么办?

【问题讨论】:

    标签: ios swift firebase firebase-authentication firebase-security


    【解决方案1】:

    Firebase 的某个人对这种情况进行了思考。您可以通过将身份验证提供程序凭据链接到现有用户帐户来允许用户使用多个身份验证提供程序登录您的应用程序。用户可以通过相同的 Firebase 用户 ID 来识别,无论他们用于登录的身份验证提供商是什么。例如,使用密码登录的用户可以关联一个 Google 帐户,并在将来使用任何一种方法登录。或者,匿名用户可以链接 Facebook 帐户,然后再登录 Facebook 以继续使用您的应用程序。详情here

    【讨论】:

    • 所以在我的情况下,我不应该从匿名转换为谷歌账户作为提供者,但我应该添加谷歌账户作为提供者,所以一个用户 ID 将同时具有谷歌账户和匿名作为提供者?
    • 没错。不要“转换”任何东西。只是粉红色的两个帐户。据我了解,如果匿名的 UID 是“a1b2..”,那么无论用户是否使用他/她的谷歌帐户,您都将获得相同的 UID(即“a1b2”)
    • 但问题是......当用户 a1b2 从他们的谷歌帐户注销时,如何使用 a1b2 的 uid 签名()?因为据我了解,如果我使用 signinanonymously(),sdk 将提供一个新的 uid。我认为这很重要,因为如果我有一个新的 uid,那么它将是很多匿名用户
    • 假设用户在特定设备上匿名登录。然后他使用他的谷歌帐户登录。他退出。并再次在同一设备上匿名登录。现在,在这三个登录中,您将获得 UID 为“a1b2”(前提是您链接了帐户)。
    猜你喜欢
    • 1970-01-01
    • 2019-04-22
    • 2021-05-24
    • 2020-06-17
    • 2020-09-11
    • 2018-01-11
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多