如何在PHP+MySQL网站中实现Google、Facebook、Github第三方登录
实现Google、Facebook、GitHub第三方登录的PHP方案
Google登录实现
- 你用的Google云平台就是专门配置谷歌登录的,步骤如下:
- 在平台创建项目,启用「Google 登录」API,完成OAuth同意屏幕配置,获取客户端ID和客户端密钥。
- 用Composer安装官方SDK:
composer require google/apiclient:^2.0 - 核心代码逻辑:
- 初始化客户端:
$client = new Google_Client(); $client->setClientId('你的客户端ID'); $client->setClientSecret('你的客户端密钥'); $client->setRedirectUri('你的回调URL'); $client->addScope('email'); $client->addScope('profile'); - 生成登录链接:
$authUrl = $client->createAuthUrl();,前端跳转此链接即可引导用户授权 - 回调页面获取用户信息:
if (isset($_GET['code'])) { $token = $client->fetchAccessTokenWithAuthCode($_GET['code']); $client->setAccessToken($token); $oauth = new Google_Service_Oauth2($client); $userInfo = $oauth->userinfo->get(); // 将$userInfo中的邮箱、昵称、谷歌用户ID存入MySQL }
- 初始化客户端:
Facebook登录实现
- 需要到Facebook开发者平台创建应用:
- 创建应用后添加「Facebook 登录」产品,配置与项目一致的回调URL,获取应用ID和应用密钥。
- 安装SDK:
composer require facebook/graph-sdk - 核心逻辑:
- 初始化SDK并生成登录链接:
$fb = new Facebook\Facebook([ 'app_id' => '你的应用ID', 'app_secret' => '你的应用密钥', 'default_graph_version' => 'v18.0', ]); $helper = $fb->getRedirectLoginHelper(); $permissions = ['email']; $loginUrl = $helper->getLoginUrl('你的回调URL', $permissions); - 回调页面获取用户信息:
try { $accessToken = $helper->getAccessToken(); $response = $fb->get('/me?fields=id,name,email', $accessToken); $user = $response->getGraphUser(); // 将用户信息存入MySQL } catch(Facebook\Exceptions\FacebookResponseException $e) { // 处理API返回错误 } catch(Facebook\Exceptions\FacebookSDKException $e) { // 处理SDK调用错误 }
- 初始化SDK并生成登录链接:
GitHub登录实现
- 在GitHub的开发者设置中配置:
- 进入「Settings」→「Developer settings」→「OAuth Apps」,创建新应用,设置回调URL,获取客户端ID和客户端密钥。
- 无需SDK,直接通过HTTP请求实现:
- 生成登录链接:
https://github.com/login/oauth/authorize?client_id=你的客户端ID&scope=user:email - 回调页面获取访问令牌:
$code = $_GET['code']; $tokenData = http_build_query([ 'client_id' => '你的客户端ID', 'client_secret' => '你的客户端密钥', 'code' => $code ]); $context = stream_context_create([ 'http' => ['method' => 'POST', 'content' => $tokenData] ]); $tokenResponse = file_get_contents('https://github.com/login/oauth/access_token', false, $context); parse_str($tokenResponse, $token); - 获取用户信息:
$userContext = stream_context_create([ 'http' => ['header' => 'Authorization: token ' . $token['access_token']] ]); $userInfo = json_decode(file_get_contents('https://api.github.com/user', false, $userContext), true); $emailInfo = json_decode(file_get_contents('https://api.github.com/user/emails', false, $userContext), true); // 提取用户昵称、ID、邮箱存入MySQL
- 生成登录链接:
新手必注意事项
- 所有平台配置的回调URL必须和项目中的完全一致,包括协议(http/https)、域名、路径,否则会直接触发授权失败。
- MySQL用户表建议包含字段:
id(自增主键)、provider(第三方类型,如google/facebook/github)、provider_id(第三方用户ID)、email、nickname,用provider+provider_id做唯一索引,避免同一用户重复注册。 - 登录成功后要通过PHP会话(
$_SESSION)记录用户状态,实现页面鉴权。
内容的提问来源于stack exchange,提问作者Pranay Dubey
相关产品推荐
相关产品推荐

