18910140161

有没有一种简单的方法可以在HTML文件中添加google登录按钮?-堆栈溢出

顺晟科技

2022-10-19 13:00:46

74

我使用google OAuth2.0创建了一个google登录,我使用Xamp和php配置它来构建数据库,我在我的项目之外构建了它,现在我想在我的项目中包含google登录按钮,但我总是出错。从我的localhost中,我想先将它添加到我的文件中,并在上传它之前查看它在我的页面中的外观。下面是我的index.php文件


顺晟科技:

看起来您希望收集谷歌用户名和密码,然后将其传递给谷歌auth引擎?这不是我实现解决方案的方式。 Google为集成登录服务提供说明。 我建议遵循这些指示。这将需要以下文件:

  1. 包含google登录按钮的登录页面。您可以将其添加到现有的任何页面中。相关代码为:
<?php
require_once('config.php');
require_once('core/controller.Class.php');

?>


<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="uft-8">
<meta name="viewport" content="width=device-width, inital-scale=1">
<title>Login with Google</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" >
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous">
</head>

<body>
    <div class="container" style="margin-top: 100px">
    <?php
        if(isset($_COOKIE["id"]) && isset($_COOKIE["sess"])){
            $Controller = new Controller;
            if($Controller -> checkUserStatus($_COOKIE["id"], $_COOKIE["sess"])){
                echo $Controller -> printData(intval($_COOKIE["id"]));
                echo '<a href="logout.php">Logout</a>';
            }else{
                echo "Error!";
            }
            
        }else{

    ?>
    <img src="img/20210908_214559.jpg" alt="Logo"
    style="display: table; margin: 0 auto; max-width: 150px;">

    <form action="" method=:POST>
        <div class="form-group">
            <label for="exampleInputEmail1">Email Address</label>
            <input type="email" class="form-control" id="exampleInputEmail1"
            placeholder="Enter email">
        </div>
        <div class="form-group">
            <label for="exampleInputPassword1">Password</label>
            <input type="password" class="form-control" id="exampleInputPassword1"
            placeholder="Enter password">
        </div>
        <button type="submit" class="btn btn-primary">Login</button>
        <button onClick="window.location = '<?php echo $login_url;?>'" type="button" class="btn btn-danger">Login with Google</button>
    </div>
    </form>
        <?php } ?>
        
 </body>
 </html>
  1. 一个javascript文件,它包含onSignIn函数和signOut函数(如果需要的话)。该文件处理到成功登录页面的重定向,并传递您想从用户的Google帐户收集的属性。我使用的是XMLHttpRequest,但如果您愿意,也可以使用POST。此页面包含用户成功登录后将指向的页面,设置在xhr.onreadystatechange=function(){}:
<?php
require_once('config.php');
require_once('core/controller.Class.php');

?>


<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="uft-8">
<meta name="viewport" content="width=device-width, inital-scale=1">
<title>Login with Google</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" >
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous">
</head>

<body>
    <div class="container" style="margin-top: 100px">
    <?php
        if(isset($_COOKIE["id"]) && isset($_COOKIE["sess"])){
            $Controller = new Controller;
            if($Controller -> checkUserStatus($_COOKIE["id"], $_COOKIE["sess"])){
                echo $Controller -> printData(intval($_COOKIE["id"]));
                echo '<a href="logout.php">Logout</a>';
            }else{
                echo "Error!";
            }
            
        }else{

    ?>
    <img src="img/20210908_214559.jpg" alt="Logo"
    style="display: table; margin: 0 auto; max-width: 150px;">

    <form action="" method=:POST>
        <div class="form-group">
            <label for="exampleInputEmail1">Email Address</label>
            <input type="email" class="form-control" id="exampleInputEmail1"
            placeholder="Enter email">
        </div>
        <div class="form-group">
            <label for="exampleInputPassword1">Password</label>
            <input type="password" class="form-control" id="exampleInputPassword1"
            placeholder="Enter password">
        </div>
        <button type="submit" class="btn btn-primary">Login</button>
        <button onClick="window.location = '<?php echo $login_url;?>'" type="button" class="btn btn-danger">Login with Google</button>
    </div>
    </form>
        <?php } ?>
        
 </body>
 </html>
  1. 处理身份验证的文件(在我上面的javascript文件中称为includes/oauth.php)。请注意$leeway的设置--这让我非常难过,因为我发现服务器上的时钟比Google auth服务器的时钟慢!):
<?php
require_once('config.php');
require_once('core/controller.Class.php');

?>


<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="uft-8">
<meta name="viewport" content="width=device-width, inital-scale=1">
<title>Login with Google</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" >
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous">
</head>

<body>
    <div class="container" style="margin-top: 100px">
    <?php
        if(isset($_COOKIE["id"]) && isset($_COOKIE["sess"])){
            $Controller = new Controller;
            if($Controller -> checkUserStatus($_COOKIE["id"], $_COOKIE["sess"])){
                echo $Controller -> printData(intval($_COOKIE["id"]));
                echo '<a href="logout.php">Logout</a>';
            }else{
                echo "Error!";
            }
            
        }else{

    ?>
    <img src="img/20210908_214559.jpg" alt="Logo"
    style="display: table; margin: 0 auto; max-width: 150px;">

    <form action="" method=:POST>
        <div class="form-group">
            <label for="exampleInputEmail1">Email Address</label>
            <input type="email" class="form-control" id="exampleInputEmail1"
            placeholder="Enter email">
        </div>
        <div class="form-group">
            <label for="exampleInputPassword1">Password</label>
            <input type="password" class="form-control" id="exampleInputPassword1"
            placeholder="Enter password">
        </div>
        <button type="submit" class="btn btn-primary">Login</button>
        <button onClick="window.location = '<?php echo $login_url;?>'" type="button" class="btn btn-danger">Login with Google</button>
    </div>
    </form>
        <?php } ?>
        
 </body>
 </html>
  1. 成功登录后将显示的页面。我在这里使用了一个interstatial页面,因为经过身份验证的用户可能是我的网站的新用户,需要创建一个配置文件,或者可能是一个现有的用户,想要进行他们的活动。我查看是否已启动会话,以及是否包括成功的身份验证。
  • TAG:
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航