将 Firebase Google 登录信息添加到外部数据库

Posted

技术标签:

【中文标题】将 Firebase Google 登录信息添加到外部数据库【英文标题】:Adding Firebase Google Log-in Information to External Database 【发布时间】:2018-09-11 06:19:06 【问题描述】:

我正在开发一个网络应用程序,目前,我正在尝试将一些 Firebase 谷歌身份验证信息(基本上是电子邮件或唯一 ID)发送到我的服务器上托管的外部数据库中。问题是,我不知道我应该在我的数据库中存储什么,或者我应该在哪里编写代码来存储它。通常,当我在 html 中创建表单时,我会编写一些 php 来发送名称之类的内容并存储它。但这似乎要复杂得多。我是 Firebase、PHP 等的非常新手,我真的可以使用一些指导。下面是我使用 Google 帐户登录的 Firebase 代码。如果我在其中的某个地方犯了错误,我深表歉意——我一直在使用在线教程作为开始。

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>

  <script src="https://www.gstatic.com/firebasejs/4.12.0/firebase.js"></script>
  <script>
  // Initialize Firebase
  var config = 
    apiKey: [apiKey goes here]
    authDomain: [authDomain goes here]
    databaseURL: [database URL goes here]
    projectId: [projectID goes here]
    storageBucket: [""]
    messagingSenderId: [""]
  ;
  firebase.initializeApp(config);
</script>

<script src="https://cdn.firebase.com/libs/firebaseui/2.6.3/firebaseui.js"></script>
<link type="text/css" rel="stylesheet" href="https://cdn.firebase.com/libs/firebaseui/2.6.3/firebaseui.css" />
<script type="text/javascript">
  // FirebaseUI config.
  var uiConfig = 
    signInSuccessUrl: 'loggedIn.html',
    signInOptions: [
      // Leave the lines as is for the providers you want to offer your users.
      firebase.auth.GoogleAuthProvider.PROVIDER_ID
    ],
    // Terms of service url.
    tosUrl: '<your-tos-url>'
  ;

  // Initialize the FirebaseUI Widget using Firebase.
  var ui = new firebaseui.auth.AuthUI(firebase.auth());
  // The start method will wait until the DOM is loaded.
  ui.start('#firebaseui-auth-container', uiConfig);
</script>

  <body>
    <div id="firebaseui-auth-container"></div>
  </body>
</html>

【问题讨论】:

【参考方案1】:

如果您想存储经过身份验证的用户(php 或其他方式)可以访问的用户特定数据,则基本上每次需要访问用户特定数据时都需要将用户 ID 令牌发送到您的服务器。您从当前用户那里获得 ID 令牌:

firebase.auth().currentUser.getIdToken().then(function(idToken) 
  // You can now pass this ID token to your endpoint for manipulating user data.
)...

在您的服务器上,您将验证 ID 令牌并获取用户的 uid。以下是如何执行此操作的示例: How to verify firebase ID token with PHP(JWT)?

你可以从解码后的token中获取sub字段来获取用户的uid

【讨论】:

我应该在我的代码中的哪个位置添加 firebase.auth().currentUser.getIdToken().then(function(idToken) 部分?在括号内,我会使用诸如 HTTPS POST 调用服务器之类的东西,对吗? 您在向服务器发送请求之前添加该调用。假设用户想在结帐前检查他们的购物车信息,他们会向您的服务器发布请求并传递他们的 ID 令牌。正确的。在函数内部,您将使用 HTTPS POST。 所以我会把它放在var ui = new firebaseui.auth.AuthUI(firebase.auth()); 之后?或者可能在signInOptions 括号内?我想我只是不太确定应该在什么时候将令牌/发送请求发送到我的服务器。 您随时调用它。

以上是关于将 Firebase Google 登录信息添加到外部数据库的主要内容,如果未能解决你的问题,请参考以下文章

使用firebase和flutter登录google后获取用户详细信息

Flutter Firebase Google 登录不起作用。账户选择后停止

将 Firebase 登录信息转移到今天的扩展程序

我应该将 google-services.json(来自 Firebase)添加到我的存储库吗?

将登录屏幕切换到家庭 firebase 和 google

Firebase google 登录身份验证 AppDelegate-使用未解析的标识符“isMFAEnabled”