如何从 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 变量,我们可以轻松地使用它们来执行我们的插入查询。但是我们需要检查邮箱是否已经注册过。
我正在尝试创建一个网站,用户可以在其中使用 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 变量,我们可以轻松地使用它们来执行我们的插入查询。但是我们需要检查邮箱是否已经注册过。