如何从 google 登录获取 php 会话数据

How to get php session data from a google sign in

我正在尝试创建一个网站,用户可以在其中使用 google 登录名 (https://developers.google.com/identity/sign-in/web/sign-in) 登录。该网站有多个页面,并从 mysql 数据库中获取用户数据。我想将用户的数据(姓名、电子邮件)存储在 php 会话中,以便在访问数据库时为 php 做好准备。登录功能有效,但我无法弄清楚如何将数据获取到 php,目前所有数据都在 javascript.

没有常规方法可以做到这一点,但我能够从 google 身份验证令牌

中获取信息
function get_var($var_index) {
    $id = $_POST["id"];
    $id_token = file("https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=" . $id);
    $var = str_replace("\"", "", $id_token[$var_index]);
    $var = str_replace(",", "", $var);
    $var = substr($var, strpos($var, ":") + 2 );
    return $var;
}


$name = get_var(12);
$email = get_var(5);
$img_url = get_var(13);
$exp = get_var(8);
$iss = get_var(9);



if ($_SERVER['REQUEST_TIME'] < $exp) {
    session_start();
    $_SESSION["name"] = $name;
    //$_SESSION["imageurl"] = $img_url;
    $_SESSION["email"] = $email;
    $_SESSION["exp"] = $exp; // when to auto logout

     header("LOCATION: page.php");
     exit();
} else{
    header("LOCATION: loginpage.html");
}

您可以为此使用 ajax。这是一种非常有效的方式。只需确保您的页面 jquery 未压缩或缩小(不是苗条)就可以了。

我的 javascript 代码在我的页面中,按钮是:-

        function onSignIn(googleUser) {

        var profile = googleUser.getBasicProfile();

        $.ajax({

            type: "POST",
            url: "googlesignin.php?action=google",
            data: "gmail=" + profile.getEmail() + "&name=" + profile.getName(),
            success: function(result) {

                if (result == 1) {

                    alert("Hello, " + profile.getName());

                    $("#googlesignin").hide();

                } else {

                    alert("failed to login");

                }
                
            }
            
        })

    }

所以现在名为 googlesignin.php 的新文件将从中执行对 mysql 数据库的插入查询

if ($_GET['action'] == "google") {

$email = $_POST['gmail'];

$name = $_POST['name'];

$query = "SELECT * FROM google WHERE email='".$email."' AND name='".$name."'";

$result = mysqli_query($link, $query);

if (mysqli_num_rows($result) > 0) {

    echo 1;
    
} else {

    $query = "INSERT INTO google (email, name) VALUES ('".$email."', '".$name."')";

    $result = mysqli_query($link, $query);

    echo 1;
    
}

}

所以现在我们已经将 post 变量存储为 php 变量,我们可以轻松地使用它们来执行我们的插入查询。但是我们需要检查邮箱是否已经注册过。