PHP 实现 Gmail 社交登录 demo

以下是使用 PHP 实现 Gmail 社交登录的步骤:

1. 在 Google Cloud Platform 上创建项目并设置 Google Sign-In:

  • 访问 Google Cloud Console 并创建一个新项目。
  • 在左侧导航菜单中,选择 API 和服务 > OAuth 同意屏幕
  • 选择 外部 用户类型,然后点击 创建
  • 输入应用名称(例如,“我的网站登录”),并填写其他必要信息。
  • 在 授权范围 页面上,暂时跳过此步骤。
  • 在 测试用户 页面上,添加您要用于测试登录的 Google 帐户。
  • 保存并验证您的配置。
  • 在左侧导航菜单中,选择 凭据,然后点击 创建凭据 > OAuth 客户端 ID
  • 选择 Web 应用程序 作为应用程序类型。
  • 输入一个名称(例如,“我的网站 Web 客户端”)。
  • 在 授权重定向 URI 字段中,输入您的网站登录页面 URL,例如 https://www.example.com/login.php
  • 点击 创建
  • 记下生成的 客户端 ID 和 客户端密钥,您将需要在 PHP 代码中使用它们。

2. 安装 Google API PHP 客户端库:

使用 Composer 安装 Google API PHP 客户端库:

composer require google/apiclient:^2.0

3. 创建 PHP 登录页面:

创建一个名为 login.php 的 PHP 文件,并添加以下代码:

<?php
session_start();

require_once __DIR__ . '/vendor/autoload.php';

$client = new Google_Client();
$client->setClientId('YOUR_GOOGLE_CLIENT_ID');
$client->setClientSecret('YOUR_GOOGLE_CLIENT_SECRET');
$client->setRedirectUri('https://www.example.com/login.php');
$client->addScope(Google_Service_Oauth2::USERINFO_EMAIL);
$client->addScope(Google_Service_Oauth2::USERINFO_PROFILE);

if (isset($_GET['code'])) {
    $token = $client->fetchAccessTokenWithAuthCode($_GET['code']);
    $client->setAccessToken($token);

    // 获取用户信息
    $oauth2 = new Google_Service_Oauth2($client);
    $userInfo = $oauth2->userinfo->get();

    // 将用户信息存储在 session 中
    $_SESSION['user'] = [
        'id' => $userInfo->getId(),
        'email' => $userInfo->getEmail(),
        'name' => $userInfo->getName(),
        'picture' => $userInfo->getPicture(),
    ];

    // 跳转到主页或其他页面
    header('Location: /');
    exit;
} else {
    $authUrl = $client->createAuthUrl();
    // 将用户重定向到 Google 登录页面
    header("Location: $authUrl");
}
?>

请注意:

  • 将 YOUR_GOOGLE_CLIENT_ID 和 YOUR_GOOGLE_CLIENT_SECRET 替换为您在步骤 1 中获得的实际值。
  • 将 https://www.example.com/login.php 替换为您网站的实际登录页面 URL。

4. 处理登录后的用户信息:

在登录成功后,您可以从 $_SESSION['user'] 数组中访问用户信息,并将其用于个性化用户体验,例如:

<?php
session_start();

if (isset($_SESSION['user'])) {
    // 用户已登录
    $user = $_SESSION['user'];
    echo '欢迎,' . $user['name'] . '!';
} else {
    // 用户未登录
    echo '<a href="/login.php">使用 Google 登录</a>';
}
?>

安全注意事项:

  • 永远不要将您的客户端密钥嵌入到客户端代码中。
  • 使用 HTTPS 保护您的网站和用户数据。
  • 在将用户信息存储到数据库之前,请对其进行清理和验证。
  • 使用准备好的语句来防止 SQL 注入攻击.

这只是一个基本的实现示例,您可以根据自己的需求进行调整和扩展。


评论

《 “PHP 实现 Gmail 社交登录 demo” 》 有 2 条评论

  1. 在 测试用户 页面上,添加您要用于测试登录的 Google 帐户。
    保存并验证您的配置。
    大佬,你好,上面这点,如果放到正式上线中的时候,这个还需要吗,因为不可能要每个用户去测试登录吧?一般都是直接点击邮箱登录了

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注