文档章节

Github 创建oauth应用,并获取用户信息

亦可塞艇
 亦可塞艇
发布于 2017/05/09 16:26
字数 379
阅读 123
收藏 0

第一步

创建GitHub的应用 : https://github.com/settings/applications/new

填写好应用名称,主页url,介绍,回调url保存即可,系统会分配给我们client_id和client_secret

第二步,写代码咯,有一点需要注意的是,获取用户信息需要带上指定的user-agent,否则接口会返回403哦

$this->curl->http_header('User-Agent', 'https://api.github.com/meta');
 

<?php

/**
 * Created by PhpStorm.
 * User: lf
 * Date: 2017/5/8
 * Time: 16:20
 */
class  Github_callback extends CI_Controller
{


    private $client_id = 'your github application client_id';
    private $client_secret = 'your github application client_secret';
    private $auth_url = 'https://github.com/login/oauth/authorize?';//授权地址
    private $token_url = 'https://github.com/login/oauth/access_token?';//获取access_token地址
    private $user_url = 'https://api.github.com/user?';//获取用户信息地址
    public function __construct()
    {
        parent::__construct();
    }

    /*
     * 发起授权demo and  授权回调
     */
    public function index()
    {
        $code = $this->input->get('code');
        if (!$code) {
            $params = ['client_id' => $this->client_id, 'scope' => 'user'];
            $jump_url = $this->auth_url . http_build_query($params);
            header('Location:' . $jump_url);
            exit;
        } else {
            $token_params = [
                'client_id' => $this->client_id,
                'client_secret' => $this->client_secret,
                'code' => $code
            ];
            $access_token_url = $this->token_url . http_build_query($token_params);
            $access_token = $this->curl_get($access_token_url);
            $user_url = $this->user_url . $access_token;
            $user_info = $this->curl_get($user_url);
            $user_data = json_decode($user_info, true);
            $this->handle_github_user($user_data);
        }
    }



    private function curl_get($url)
    {
        $this->load->library('Curl');
        $this->curl->http_header('User-Agent', 'https://api.github.com/meta');
        $resullt = $this->curl->simple_get($url);
        return $resullt;
    }


    /**
     * 处理用户逻辑/入库或者redis
     * @param $user_data
     * @return bool
     */
    private function handle_github_user($user_data)
    {

        $this->load->driver('cache', array('adapter' => 'redis'));
        $cache_key = 'github_user_id_';
        $user_info = $this->cache->get($cache_key . $user_data['id']);
        if (!$user_info && $user_data && $user_data['id']) {
            $this->cache->save($cache_key . $user_data['id'], $user_data);
        } else {
            return false;
        }
        return true;
    }


}

© 著作权归作者所有

亦可塞艇
粉丝 15
博文 7
码字总数 2585
作品 0
杭州
程序员
私信 提问
加载中

评论(2)

亦可塞艇
亦可塞艇 博主
🏡
亦可塞艇
亦可塞艇 博主
😄
PwnAuth——一个可以揭露OAuth滥用的利器

      一、简介   鱼叉式网络钓鱼攻击被视为企业最大的网络威胁之一。只需要一名员工输入自己的凭证或运行一些恶意软件,整个企业都会受到威胁。因此,公司投入大量资源来防止凭证收集...

嘶吼RoarTalk
2018/05/26
0
0
PwnAuth:OAuth滥用攻击检测和响应平台

  背景   鱼叉式网络钓鱼攻击被视为企业最大的网络威胁之一。只需一名员工大意的输入了他的凭据,或运行了一些未知的恶意软件,就可能会使整个企业网络掌控于攻击者,甚至瘫痪。因此,公...

FreeBuf
2018/05/31
0
0
基于python flask详述 OAuth 2.0 的运作流程

OAuth2 对于我来说是一个神秘的东西,我想初步的弄懂中间的整个流程,于是就去google搜索相关的文档资料。 在浏览了参差不齐的各种文章后,简述 OAuth 2.0 的运作流程 基本对于小白来说是最浅...

大胡桃夹子
2018/07/11
0
0
腾讯微博Android客户端开发 - OAuth1.0认证介绍

http://wiki.open.t.qq.com/index.php/OAuth%E6%8E%88%E6%9D%83%E8%AF%B4%E6%98%8E 目录 1 腾讯微博 API OAuth认证介绍 2 OAuth是什么? 3 OAuth的原理认证流程及访问资源流程 3.1 请求签名说...

jxlgzwh
2013/07/06
0
0
OAuth 2 开发人员指南(Spring security oauth2)

入门 这是支持OAuth2.0的用户指南。对于OAuth1.0,一切都是不同的,所以看它的用户指南。 本用户指南分为两个部分,第一部分是OAuth2.0提供端(OAuth 2.0 Provider),第二部分是OAuth2.0的客...

666B
2014/09/24
66.2K
23

没有更多内容

加载失败,请刷新页面

加载更多

枚举 创建/获取key,name,list

创建枚举 public enum MessageTypeEnum { // 类型:0.一般消息,1.公告消息,2交易消息,3.活动消息,4.其他消息 type_general("一般消息", "0"), type_ann("公告消息", "1")......

龘游戏人生龘
20分钟前
1
0
Linus 本尊来了!为什么 KubeCon 越来越火?

阿里妹导读: 从200人的小会议到3500 多位云原生和开源领域工程师齐聚一堂的大会,KubeCon 只用了四年,昨天,在KubeCon China 2019 上阿里巴巴宣布开源 OpenKruise,今天,Linus 本尊竟然现...

阿里云云栖社区
57分钟前
3
0
五小时构建云原生电商平台 | KubeCon SOFAStack Workshop 详解

本文根据 KubeCon China 2019 同场活动 SOFAStack Cloud Native Workshop 内容整理, 文末包含文档、PPT 地址,欢迎试用和提出建议。 2019 年 6 月 25 日,在 KubeCon China 2019,全球知名开...

SOFAStack
58分钟前
6
0
跨平台开发框架DevExtreme v19.1.4正式发布|附下载

DevExtreme Complete Subscription是性能最优的 HTML5,CSS 和 JavaScript 移动、Web开发框架,可以直接在Visual Studio集成开发环境,构建iOS,Android,Tizen和Windows Phone 8应用程序。D...

FILA6666
59分钟前
2
0
数据库链接断开 Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

报错信息如下: Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureThe last packet successfully received from the server was 97,130 mill......

为了美好的明天
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部