Ios 如果我希望注销的用户仍然可以使用firebase身份验证匿名访问内容,我该怎么办?

Ios 如果我希望注销的用户仍然可以使用firebase身份验证匿名访问内容,我该怎么办?,ios,swift,firebase,firebase-authentication,firebase-security,Ios,Swift,Firebase,Firebase Authentication,Firebase Security,所以我想让一个新用户在决定实际登录之前可以看到我的应用程序中的一些内容 我需要在新用户登录之前为他们实现,因为在我的firebase安全规则中,有一个规则状态,用户必须像这样登录 function isSignedIn() { return request.auth != null; } 1) 首先,安装应用程序后,一个新用户出现,然后使用下面的代码匿名登录,假设这个匿名用户的用户ID是A1a2A3a4A5a6A7 Auth.auth().signInAnonymously() {

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

我需要在新用户登录之前为他们实现,因为在我的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()
问题是

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

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

我必须再次匿名执行签名吗?但这将创建一个新的不同的用户ID,对吗?我担心如果创建一个新的用户ID,它会产生一个双重帐户

或者我可以将注册用户身份验证提供商从使用google帐户登录改为匿名。为了保持用户ID不变


我不知道是否有更好的方法,我该怎么办?

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

因此,在我的情况下,我不应该将匿名转换为google帐户作为提供商,但我应该添加google帐户作为提供商,这样一个用户ID将同时拥有google帐户和匿名作为提供商?没错。不要“转换”任何东西。把这两个帐户打成粉红色就行了。据我所知,如果匿名用户的UID是“a1b2…”,那么无论用户是否使用他/她的google帐户,您都会得到相同的UID(即“a1b2”),但问题是….当用户a1b2从其google帐户注销时,如何使用a1b2的UID以匿名方式()登录?因为据我所知,如果我使用signinanoymously(),sdk将提供一个新的uid。我认为这很重要,因为如果我有一个新的uid,那么将会有很多匿名用户,比如说一个用户在一个特定的设备上匿名登录。然后他用他的谷歌账号登录。他注销了。然后再次在同一设备上匿名登录。现在,在这三次登录中,您将获得UID为“a1b2”(前提是您链接了帐户)。