html第三方登录代码编写,web网站接入GitHub第三方登录(踩坑)

编程入门 行业动态 更新时间:2024-10-18 21:17:48

html<a href=https://www.elefans.com/category/jswz/34/1770258.html style=第三方登录代码编写,web网站接入GitHub第三方登录(踩坑)"/>

html第三方登录代码编写,web网站接入GitHub第三方登录(踩坑)

web网站接入GitHub第三方登录(踩坑)

博客已近上线了几个月了,但是一直没有做用户登录,这两天想了下,干脆直接用第三方登录吧,最终决定用QQ,Gitee,GitHub三种方式登录,下面是我的踩坑纪录和实现源码,分享出来

官方文档地址/

创建应用,获取Client ID,Client Secret,Authorization callback URL

进入后,找到左侧 Developer settings

填写你的应用信息,保存即可

保存后,纪录下面的两个值和你填写的回调地址

编写代码,获取数据

1. 入口重定向

接口:=yourclientid&redirect_uri=yourredirect_uri

github登录

重定向至下面页面

2. 根据code获取access_token

回调页面中处理

获取access_token接口:

// 用户登录

if (isset($_GET['code'])) {

$access_token_url = '';

$params = array(

'client_id' => self::GITHUB_CLIENT_ID,

'client_secret' => self::GITHUB_CLIENT_SECRET,

'code' => $_GET['code'],

);

$access_token = getHttpResponsePOST($access_token_url, $params);

}

取到的access_token数据格式是string

access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&token_type=bearer

3. 根据access_token获取用户信息

获取用户信息接口:

在这我用的是curl进行http请求,

if ($access_token) {

$info_url = '?'.$access_token;

$data = array();

parse_str($access_token,$data);

$token = $data['access_token'];

$url = "=".$token;

$headers[] = 'Authorization: token '.$token;

$headers[] = "User-Agent: 木木彡博客";

$result = getHttpResponseGET($info_url,[],$headers);

$info = json_decode($result,true);

if (isset($info['id'])) {

// 处理获取到的数据

}

}

4. 开发过程中的坑

上面步骤中,第一步和第二步都没问题,但是到第三部时,看我代码你会发现,我在curl请求时添加了header,这个header必须填写,这可能是github的严格的验证机制吧,其中

1、Authorization填写内容是你获取到的access_token,例:"Authorization: token e72e16c7e42f292c6912e7710c838347ae178b4a";

2、User-Agent填写内容是你的应用名称,如我的应用名称是木木彡博客,例:"User-Agent: 木木彡博客"

5. 处理数据完整代码

// 用户登录

public function github()

{

if (isset($_GET['code'])) {

$access_token_url = '';

$params = array(

'client_id' => self::GITHUB_CLIENT_ID,

'client_secret' => self::GITHUB_CLIENT_SECRET,

'code' => $_GET['code'],

);

$access_token = getHttpResponsePOST($access_token_url, $params);

if ($access_token) {

$info_url = '?'.$access_token;

$data = array();

parse_str($access_token,$data);

$token = $data['access_token'];

$url = "=".$token;

$headers[] = 'Authorization: token '.$token;

$headers[] = "User-Agent: 木木彡博客";

$result = getHttpResponseGET($info_url, $headers);

$info = json_decode($result,true);

if (isset($info['id'])) {

$Oauth = new OauthModel();

$num = $Oauth->github($info);

if ($num==3) {

// 登录成功

$this->redirect('index/index');

}

}

}

}

}

/**

* 远程获取数据,POST模式

* @param $url 指定URL完整路径地址

* @param $param 请求的数据

* return 远程输出的数据

*/

function getHttpResponsePOST($url = '', $param = array()) {

if (empty($url) || empty($param)) {

return false;

}

$ch = curl_init();//初始化curl

curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页

curl_setopt($ch, CURLOPT_HEADER, 0);//设置header

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上

curl_setopt($ch, CURLOPT_POST, 1);//post提交方式

curl_setopt($ch, CURLOPT_POSTFIELDS, $param);

$data = curl_exec($ch);//运行curl

curl_close($ch);

return $data;

}

/**

* 远程获取数据,GET模式

* 注意:

* @param $url 指定URL完整路径地址

* @param $header 头部

* return 远程输出的数据

*/

function getHttpResponseGET($url,$header=null) {

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

if(!empty($header)){

curl_setopt($curl, CURLOPT_HTTPHEADER, $header);

}

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($curl);

// echo curl_getinfo($curl);

curl_close($curl);

unset($curl);

return $output;

}

更多推荐

html第三方登录代码编写,web网站接入GitHub第三方登录(踩坑)

本文发布于:2024-03-05 13:49:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1712458.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:第三方   代码   网站   html   踩坑

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!