如何将谷歌登录集成到我的网站并收集用户详细信息?

Posted

技术标签:

【中文标题】如何将谷歌登录集成到我的网站并收集用户详细信息?【英文标题】:How do I integrate google sign in to my website and collect the users details? 【发布时间】:2018-12-26 22:37:13 【问题描述】:

我想将 google 登录按钮集成到 my website。我知道 html,但我不确定 php 和 java 脚本。最终,我希望 google 登录以登录用户并向我提供他们的信息,以便我可以将其安全地存储在 phpmyadmin 上的数据库中。我为此访问了the google tutorial,但发现它没有解释如何完全收集用户信息。我试图遵循这一点,到目前为止我有this,但它远非应有的样子。我看过其他教程,例如this one。但是我发现他们都没有遵循谷歌的说明,例如你必须在其中下载一个谷歌 API,但是在谷歌网站上它没有提到下载任何东西。

下面是what i have managed to do so far使用google教程的代码:

<html lang="en">
  <head>
    <meta name="google-signin-scope" content="profile email">
    <meta name="google-signin-client_id" content="808271051181-424qcdq0emrd0pd77frfiuacvcetp58t.apps.googleusercontent.com">
    <script src="https://apis.google.com/js/platform.js" async defer></script>
  </head>
  <body>
    <div class="g-signin2" data-onsuccess="onSignIn" data-theme="dark"></div>
    <script>
      function onSignIn(googleUser) 
        // Useful data for your client-side scripts:
        var profile = googleUser.getBasicProfile();
        console.log("ID: " + profile.getId()); // Don't send this directly to your server!
        console.log('Full Name: ' + profile.getName());
        console.log('Given Name: ' + profile.getGivenName());
        console.log('Family Name: ' + profile.getFamilyName());
        console.log("Image URL: " + profile.getImageUrl());
        console.log("Email: " + profile.getEmail());

        // The ID token you need to pass to your backend:
        var id_token = googleUser.getAuthResponse().id_token;
        console.log("ID Token: " + id_token);
      ;
    </script>
  </body>
</html>

【问题讨论】:

【参考方案1】:

您也许可以在 javascript 中从配置文件中获取所有数据,但我想将它们的所有数据放入 php 变量中,以便可以存储在我的数据库中。为此,我将 google id 令牌作为来自 javascript 的发布数据发送(如何做到这一点here)。 您仍然需要您拥有的所有其他 google 登录代码,但我将 onSingIn 替换为:

function onSignIn(googleUser) 
    var profile = googleUser.getBasicProfile();
    document.getElementById("userid").value = googleUser.getAuthResponse().id_token;
    document.getElementById("userid").form.submit();

在正文中也添加表单代码:

<form action="login.php" method="post">
    <input type="hidden" name="id" id="userid">
</form>

然后你需要另一个我称之为 login.php 的文件,它包含以下函数:

function get_var($var)

    $id = $_POST["id"]; // id from google
    $id_token = file("https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=" . $id); // decrypted id
    foreach ($id_token as $part) 
        // part is a factor of the user such as name or email
        // remove unecessary charcters
        $peice = str_replace("\"", "", $part);
        $peice = str_replace(",", "", $peice);
        $peice = substr($peice, 0, strpos($peice, ":") + 2);
        if (strpos($peice, $var) !== false) 
            $var = str_replace("\"", "", $part);
            $var = str_replace(",", "", $var);
            $var = substr($var, strpos($var, ":") + 2);
            return $var;
        
    

有了这个,您应该能够获得您需要的所有信息。示例用法:

$name = trim(get_var("name"));
$email = trim(get_var("email"));

要查看所有可访问的信息,请在get_var 中打印$id_token 或转到https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=,在末尾添加一个id 令牌。 有关从 ID 令牌 here 获取数据的更多信息。

【讨论】:

以上是关于如何将谷歌登录集成到我的网站并收集用户详细信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何将谷歌地图位置添加到我的网站

将谷歌联系人集成到 ios 应用程序(swift)中?

将谷歌分析集成到 iOS 应用程序中

将谷歌分析与 ios 集成时出错?

如何将谷歌键盘(Gboard)添加到我自己的 android studio 项目中?

使用不同帐户的 Google 登录在应用程序中崩溃