您现在的位置是:网站首页>>PHP>>php
PHP实现github第三方登录
发布时间:2019-07-04 15:33:42作者:wangjian浏览量:692点赞量:0
这里我们就根据上一章学习的OAuth来实现github第三方登录
一:授权登记
一个应用要求 OAuth 授权,必须先到对方网站登记,让对方知道是谁在请求
填写登记表
填写完登记表之后GitHub 应该会返回客户端 ID(client ID)和客户端密钥(client secret),这就是应用的身份识别码
二:实现第三方登录
代码实例:/**
* function: actionIndex
* author: wangjian
* date: 2019/7/4 15:28
* 请求授权码
*/
public function actionIndex()
{
$redirect_uri = "http://local.basic.com/index.php?r=oauth/callback";//回调地址
$client_id = "XXXX";//填写github登记表是返回的Client ID
$_url = "https://github.com/login/oauth/authorize?client_id=" . $client_id . "&state=1&redirect_uri=" . $redirect_uri;
$this->redirect($_url);//请求授权码
}
/**
* function: actionCallback
* author: wangjian
* date: 2019/7/4 15:29
* 请求令牌并回去用户信息
*/
public function actionCallback()
{
$code = $_GET['code'];//GitHub回调返回的授权码
$client_id = "XXXX";//填写github登记表是返回的Client ID
$client_secret = "XXXX";//填写github登记表是返回的Client Secret
//请求令牌链接
$_url = "https://github.com/login/oauth/access_token?client_id=" . $client_id . "&client_secret=" . $client_secret . "&code=" . $code;
//请求令牌
$result = file_get_contents($_url);
$data = [];
parse_str($result, $data);//字符串解析到变量
//GitHub返回的令牌
$access_token = isset($data['access_token']) ? $data['access_token'] : '';
if ($access_token) {
//根据令牌获取到用户信息
$info_url = "https://api.github.com/user?access_token=" . $access_token;
$res = json_decode($this->curl($info_url));
echo "
";
print_r($res);
exit;
}
}
/**
* function: curl
* author: wangjian
* date: 2019/7/4 15:25
* 设置请求头和响应头(github API接口需要)
*/
public function curl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
// 设置请求头, 有时候需要,有时候不用,看请求网址是否有对应的要求
$header[] = "Content-type: application/x-www-form-urlencoded";
$user_agent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36";
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
// 返回 response_header, 该选项非常重要,如果不为 true, 只会获得响应的正文
curl_setopt($ch, CURLOPT_HEADER, false);
// 是否不需要响应的正文,为了节省带宽及时间,在只需要响应头的情况下可以不要正文
curl_setopt($ch, CURLOPT_NOBODY, false);
// 使用上面定义的$user_agent
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_URL, $url);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
0
+1