如何将多个身份验证提供程序链接到 Firebase 帐户?

     2023-02-23     147

关键词:

【中文标题】如何将多个身份验证提供程序链接到 Firebase 帐户?【英文标题】:How to Link Multiple Auth Providers to an Firebase Account? 【发布时间】:2016-10-12 14:51:46 【问题描述】:

我无法成功,我按照 Firebase 文档中的说明执行了以下步骤:

    使用现有的身份验证提供程序登录使用(我的案例:facebook)。 为新的身份验证提供程序完成登录流程,直至但不包括调用Auth.signInWith 方法之一。(我的情况:我想将电子邮件和密码与 Google OAUth 关联起来)。所以这是我不清楚的步骤,我使用 var provider = new firebase.auth.GoogleAuthProvider(); 创建了一个新的提供程序,但我没有这样做 Firebase.auth().signInWithPopup(provider) 。 然后为了获得 google 的 authcredential,我运行 var credential = firebase.auth.GoogleAuthProvider.credential( googleUser.getAuthResponse().id_token);我得到一个未定义的 googleUser 错误)这个错误似乎是合适的,因为我没有使用 Google Oauth 登录,但这就是第二步所说的(不要登录) 然后此命令链接到 Facebook 提供商 auth.currentUser.link(credential) 上的当前用户

我的理解是 currentUser 需要链接到我现有的 Provider(Facebook)。似乎从未计算过 google 的凭据变量。任何有功能代码示例的人都会有帮助。

【问题讨论】:

【参考方案1】:

如果您想手动将 google 和电子邮件/pass 帐户链接到现有的仅限 facebook 的 firebase 用户,您可以执行以下操作: 首先,用户应该登录到 Facebook。 链接谷歌用户:

var provider = new firebase.auth.GoogleAuthProvider();
auth.currentUser.linkWithPopup(provider);

然后链接邮箱/pass账号:

auth.currentUser.linkWithCredential(firebase.auth.EmailAuthProvider.credential(auth.currentUser.email, 'password'))

所有这些要关联的帐户必须是新的且尚未关联。

【讨论】:

不完全是。我想我没有解释清楚。我的意思是手动,因为开发人员根据某些需要选择链接(需要谷歌提供商访问谷歌日历、升级匿名用户等)。另一种情况是后端服务器出于安全原因需要它。例如,您使用返回 xyz@gmail.com 的 google 登录到 firebase。然后,用户使用 facebook 在单独的设备上登录,该设备返回相同的电子邮件 xyz@gmail.com。在这种情况下,会引发一个错误,表明凭证已在使用中。在这种情况下,您需要关联帐户才能关联两个提供商。 @bojeil 另外,如果用户在使用 Facebook 登录后退出,然后决定使用 Google 登录怎么办?那我可以把他和谷歌联系起来吗? 如果您已经拥有 oauth 凭据,则使用 linkWithCredential。这里的优点是您不需要打开弹出窗口或重定向。如果您在项目设置中设置了“每封电子邮件一个帐户”。如果用户最初使用电子邮件登录,然后使用返回相同电子邮件的 OAuth 提供商登录,则后端将抛出帐户存在的错误。您必须登录第一个帐户,然后将 OAuth 提供者帐户链接到该帐户。 Google 是一种特殊情况,因为拥有 google 电子邮件的用户被认为是经过验证的(由 Google 颁发帐户)并将覆盖现有的 facebook 帐户而无需链接。 对于 react-native,您需要获取要链接、初始化和 Firebase AuthCredential 的帐户的 OAuth 凭据,然后使用 linkWithCredential,因为该环境不支持弹出/重定向操作。 【参考方案2】:

@bojeil 我已经阅读了您的问题,并且找到了使用相同电子邮件帐户登录 Google 和 Facebook 登录的方法。首先,在 Firebase 中,您需要允许

“每个电子邮件地址有多个帐户”

Allow multiple accounts per email address

现在您可以使用具有“xyz@gmail.com”的 Facebook 和具有与“xyz@gmail.com”相同的电子邮件名称的 Google 登录。但是您将在第二次登录时遇到电子邮件为“null”相同的电子邮件。您可以使用下面的 sn-p 解决 null 问题。

只需在 firebase 的成功任务中使用这个 sn-p:

地图配置文件 = task.getResult().getAdditionalUserInfo().getProfile();

对象 email = profile.get("email"); /// 虽然我们使用相同的电子邮件形式 facebook 和 Google 登录帐户,但从使用中获取电子邮件。

通过这种方式,您可以使用同一电子邮件登录 Facebook 和 Google 登录。

希望您能通过此信息消除疑虑。如果这适合您的问题,您能回复我吗?

谢谢。

【讨论】:

但这将为每个提供商创建多个 Firebase ID - 因此名称为“多个帐户”。对于希望每个电子邮件地址拥有一个帐户的开发人员(无论提供商如何),请不要这样做 如果有人想要包含 google 和 Facebook 的相同电子邮件,那么这就是@MichaelBolboceanu 的解决方案 完全同意@MichaelBolboceanu。 这会在您的数据库中造成混乱。与将 1 个电子邮件地址链接到多个提供商不同,您最终会为每个提供商拥有多个相同电子邮件地址的条目。因此,如果用户使用同一电子邮件通过 google、facebook 和 twitter 登录,您最终会在数据库中为该用户提供三个单独的条目。

将多个auth提供程序链接到一个帐户(代码片段)

我已经实施了Facebook和Google登录。但FireBase文档称,如果同一用户首先注册Facebook并稍后尝试使用Google登录(使用相同的电子邮件),则会导致错误。所以我按照doc并尝试配置帐户链接。但我不知道该怎么做。我应该在每次用户登... 查看详情

检测登录用户的 Firebase 身份验证提供程序

】检测登录用户的Firebase身份验证提供程序【英文标题】:DetectFirebaseAuthProviderforLogedinUser【发布时间】:2018-02-2510:51:00【问题描述】:我如何检查我的用户使用哪个身份验证提供程序登录到我的应用程序?我想检测我的用户是否... 查看详情

如何使用 Firebase 登录多个社交服务?

】如何使用Firebase登录多个社交服务?【英文标题】:HowcanIloginwithmultiplesocialserviceswithFirebase?【发布时间】:2013-02-1509:14:22【问题描述】:我希望用户能够使用多个不同的身份验证提供程序(例如Facebook、Twitter或Github)对我的Fire... 查看详情

将 Firebase 身份验证与自定义提供程序一起使用

】将Firebase身份验证与自定义提供程序一起使用【英文标题】:UsingFirebaseAuthwithCustomproviders【发布时间】:2021-01-0312:06:54【问题描述】:我在一个需要使用Facebook、Twitter、Google和Twitch进行身份验证的辅助项目中使用Firebase。不幸... 查看详情

将用户 uid 链接到 firebase 数据库

】将用户uid链接到firebase数据库【英文标题】:Linkinguseruidtofirebasedatabase【发布时间】:2017-10-0617:37:54【问题描述】:我目前正在react-native中制作应用程序,并希望将firebase身份验证生成的用户ID链接到我的firebase数据库中的用户... 查看详情

Firebase 身份验证中的用户 ID 如何在所有身份验证提供程序(Google、Facebook、Github)中都相同?

】Firebase身份验证中的用户ID如何在所有身份验证提供程序(Google、Facebook、Github)中都相同?【英文标题】:HowcantheUserIDinFirebaseAuthenticationbethesameacrossallAuthenticationProviders(Google,Facebook,Github)?【发布时间】:2018-01-2405:51:16【问题描... 查看详情

Firebase UI 身份验证提供程序 iOS Swift 示例

】FirebaseUI身份验证提供程序iOSSwift示例【英文标题】:FirebaseUIAuthProvideriOSSwiftExample【发布时间】:2017-07-2113:52:58【问题描述】:我正在启动一个新的iOSSwift应用程序并希望使用FirebaseUIAuth。这是在Drop-inauthenticationsolutionFirebaseAuth... 查看详情

我应该如何为 Firebase 身份验证创建新的联合身份提供程序

】我应该如何为Firebase身份验证创建新的联合身份提供程序【英文标题】:HowshouldIcreateanewFederatedIdentityProviderforFirebaseAuthentication【发布时间】:2018-05-0501:48:42【问题描述】:我想将PayPal登录功能集成到Android应用程序中,以便向Fi... 查看详情

如何将自定义消息添加到 Firebase Google 身份验证弹出窗口?

】如何将自定义消息添加到FirebaseGoogle身份验证弹出窗口?【英文标题】:HowtoaddcustommessagetoFirebaseGoogleauthpopup?【发布时间】:2020-07-0103:04:51【问题描述】:对于***,有“在使用这个应用程序之前,您可以查看stackauth.com的隐私政... 查看详情

Firebase 身份验证服务

】Firebase身份验证服务【英文标题】:FirebaseAuthenticationService【发布时间】:2019-02-0611:21:01【问题描述】:我想设置多个认证服务。好像用户使用电子邮件和密码或电话号码登录,但我希望用户同时使用电子邮件和密码以及电话... 查看详情

处理不同的 Firebase 身份验证提供程序

】处理不同的Firebase身份验证提供程序【英文标题】:HandledifferentFirebaseAuthProviders【发布时间】:2019-10-1219:48:42【问题描述】:我想知道使用各种Firebase身份验证提供程序的最佳做法应该是什么。我有一个Flutter项目,它使用Firebas... 查看详情

如何使用 Firebase 身份验证和托管将登录用户重定向到子域?

】如何使用Firebase身份验证和托管将登录用户重定向到子域?【英文标题】:HowtoredirectloggedinusertosubdomainusingFirebaseAuthandHosting?【发布时间】:2019-09-2209:13:09【问题描述】:我的主域是domain.com,我计划将其用作登录页面。对于实... 查看详情

使用提供程序在 Flutter 中进行 Firebase 电话身份验证 [关闭]

】使用提供程序在Flutter中进行Firebase电话身份验证[关闭]【英文标题】:FirebasePhoneAuthenticationinFlutterusingProvider[closed]【发布时间】:2020-04-2500:26:18【问题描述】:我刚刚找到了一个状态管理提供商,我很想知道如何使用Provider实... 查看详情

使用 Strava 提供程序进行 Firebase 身份验证

】使用Strava提供程序进行Firebase身份验证【英文标题】:FirebaseauthenticationwithStravaprovider【发布时间】:2017-02-2119:17:22【问题描述】:我希望人们使用Strava帐户登录(strava是一个自行车/跑步平台)Firebase有一些默认的身份验证登录... 查看详情

未找到身份提供程序配置 - 使用 FacebookAuthProvider 反应本机 Firebase 身份验证

】未找到身份提供程序配置-使用FacebookAuthProvider反应本机Firebase身份验证【英文标题】:Theidentityproviderconfigurationisnotfound-ReactNativeFirebaseAuthenticationwithFacebookAuthProvider【发布时间】:2019-08-2614:31:12【问题描述】:找不到身份提供者... 查看详情

Java Spring Security 配置 - 多个身份验证提供程序

】JavaSpringSecurity配置-多个身份验证提供程序【英文标题】:JavaSpringSecurityconfig-multipleauthenticationproviders【发布时间】:2016-05-2316:20:20【问题描述】:springsecurity中有多个身份验证提供者的引用,但Java配置中找不到示例。以下链接... 查看详情

Expo App 中的 Firebase 无密码电子邮件身份验证错误

】ExpoApp中的Firebase无密码电子邮件身份验证错误【英文标题】:FirebasePasswordlessEmailAuthenticationErrorinExpoApp【发布时间】:2021-11-1413:25:29【问题描述】:我正在使用FirebaseSDK在我的Expo应用中设置无密码身份验证。我已经到了将电子... 查看详情

firebase:如何链接电子邮件验证和密码

】firebase:如何链接电子邮件验证和密码【英文标题】:firebase:howtolinkemailverificationandpassword【发布时间】:2018-12-3014:21:11【问题描述】:我已经使用电子邮件和密码对用户进行身份验证,但我想在reactnative中使用firebase添加电子... 查看详情