mar*_*ary 4 android linkedin custom-authentication firebase firebase-authentication
我通过Firebase了解到,通过将auth提供程序凭据链接到现有用户帐户,我可以允许用户使用多个身份验证提供程序登录我的应用程序.有可能链接自定义身份验证提供程序,如Linkedin?我读到我需要将AuthCredential对象传递给登录用户的linkWithCredential方法,但我找不到自定义的AuthCredential.
将不受支持的提供者自定义令牌链接到现有帐户的一种方法是获取Firebase帐户的用户ID和不受支持的提供者用户ID,并保存一个哈希映射,该映射会接收不受支持的提供者ID并返回您要链接到的firebase uid .当用户使用自定义令牌登录到不受支持的提供程序时,您将从映射中获取相应的firebase uid,并返回一个自定义令牌,该令牌位于signInWithCustomToken与原始firebase用户解析时.
缺点是您在用户的提供者数据列表中看不到不受支持的提供者.您还需要存储地图.
我想扩展 bojeil 的答案。
适用firebaseUser.linkWithCredential(credential)于受支持的提供程序,但与自定义提供程序不等效。链接 customProvider 必须由后端完成(或者可能是 Firebase Functions 之类的东西)。因为link意味着以下之一:
到Firebase User对象。
流程是这样的:
email或phone一些独特信息,并将其发送到后端,包括firebaseToken.FirebaseUser对象中。(后端还必须检查这些数据是否已经附加到其他用户。您可能会拒绝链接,因为已经有另一个用户拥有这些电子邮件、电话......)<CustomProviderId-FirebaseUserId>在某处(例如FireStore:)。这样做是因为将来,当用户想要使用 customProvider 登录时,后端需要创建CustomToken(以便客户端可以调用firebaseAuth.signInWithCustomToken)Firebase Id该用户的使用。所以这个映射就是这个问题的解决方案。firebaseUser.reload()获取新附加的数据(电子邮件、电话等...)firebaseUser.getIdToken(force=true)以获取更新的用户声明。存在挑战:
email,您需要检查该电子邮件是否已附加到任何其他用户。phone,您需要检查该电话是否已连接到任何其他用户。email和phone,则复杂性会增加,因为您必须检查其中任何一个是否已附加到任何其他用户。email或phone,则您需要该自定义提供商的该用户的唯一信息(例如华为用户 ID)。firebaseUser.providerData列表中,因此您可以添加用户声明。(例如{kakaoTalk:true, huawei:true})。根据具体情况,您不需要。例如,如果 customProvider 是 WhatsApp,则如果phone其中存在firebaseUser.phoneNumber则意味着 WhatsApp 已链接(甚至使用另一个登录提供商添加手机)。Anonymous用户,则如果电子邮件/电话未更新,则链接 customProvider可能不会firebaseUser.isAnonymous在客户端上更新,客户端仍会将 firebaseUser 视为匿名。一种解决方案是检查 linkedProviders 是否为空,以将用户视为匿名(如果这符合您的业务逻辑)。其他解决方案是当您使用 登录用户时,匿名用户状态会发生变化signInWithCustomToken。因此,在链接 customProvider 成功后,请静默注销并使用 customToken 登录,这样用户就不再是匿名的。email到匿名用户,则该用户的email字段将被更新。这将迫使客户端注销并抛出 FirebaseAuthInvalidUserExceptionerrorCode ERROR_USER_TOKEN_EXPIRED。用户必须重新登录。| 归档时间: |
|
| 查看次数: |
1282 次 |
| 最近记录: |