php第三方登录代码,PHP实现github第三方登录

您现在的位置是:网站首页>>PHP>>php

PHP实现github第三方登录

发布时间:2019-07-04 15:33:42作者:wangjian浏览量:692点赞量:0

这里我们就根据上一章学习的OAuth来实现github第三方登录

一:授权登记

一个应用要求 OAuth 授权,必须先到对方网站登记,让对方知道是谁在请求

填写登记表

414d21f436509d089bd2d4a08277c3a6.png

填写完登记表之后GitHub 应该会返回客户端 ID(client ID)和客户端密钥(client secret),这就是应用的身份识别码

243b42d6dd51befbc3e45a3b3c710664.png

二:实现第三方登录

代码实例:/**

* 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;

}

272a2ff497ff398701eef161070cd122.png

0

+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值