zoukankan      html  css  js  c++  java
  • CodeIgniter 之第三方登录

    昨天刚刚把第三方登录做好,里面包含了微博,github,qq,豆瓣。
    使用了一个国外的oauth2.0的登录类库:
    看看文件:
    在此输入图片描述
    oauth_client 是请求授权的客户端,主要是进行post,get请求,获取code及token,还有个重要的功能是组装header等授权码。
    oauth_lib 主要是调用使用。
    我们先来看看如何调用的:

    class Oauth extends CI_Controller
    {
     
        function __construct ()
        {
            parent::__construct();
        }
     
        function index ()
        {
            redirect();
        }
         
        function login()
        {
            $this->load->config('oauth');
            $site = $this->uri->segment('3');
            $this->load->library('oauth_lib');
            $this->oauth_lib->login($site);
        }
    }
       
    

    首先,引导用户进来了一个可以提供第三方登录的页面:如:http://www.aboutit.cn/welcome/index 本站测试用的。
    进入到了login方法,加载了oauth的配置:
    调用了类库的方法:

    function login($site)
        {
            if($site && array_key_exists ($site, $this->sitesConfig))
            {  
                 
                $siteConfig = $this->sitesConfig[$site];
                 
                if(strlen($siteConfig['client_id']) == 0 || strlen($siteConfig['client_secret']) == 0)
                {
                    lv('lib/oauth/configError');
                    return;
                }
                $this->oauth_client->server = $site;
                $this->oauth_client->redirect_uri ='http://www.aboutit.cn/oauth/login/'.$site;
                $this->oauth_client->client_id = $siteConfig['client_id'];
                $this->oauth_client->client_secret = $siteConfig['client_secret'];
                $this->oauth_client->scope = $siteConfig['scope'];
                 
                if(($success = $this->oauth_client->Initialize()))
                {
                     
                     
                    if(($success = $this->oauth_client->Process()))
                    {
                         
                        if(strlen($this->oauth_client->authorization_error))
                        {
                            $oauth_client->error = $this->oauth_client->authorization_error;
                            $success = false;
                        }
                        elseif(strlen($this->oauth_client->access_token))
                        {
                            $success = true;
                        }
                    }
                    $success = $this->oauth_client->Finalize($success);
                }
                if($success)
                {
                    $this->snsUserInfo($site);
                }
                else
                {
                    echo HtmlSpecialChars($this->ci->oauth_client->error);
                }
            }
        }
    

    类库首先进行了初始化,然后进行处理;注意:引导用户进入的oauth/login/github URL也是服务器配置的URL(回调地址),也就是说,获取到了code之后,还是回调oauth/login/github;

    客户端进行的工作流程是;

    初始化各个第三方的登录配置--->如果是第一次请求,获取code----->如果是第二次回调回来,则获取到了token----->利用获取用户的信息;

    在实现的过程中,需要注意几个问题;

    一个是第三方返回的数据格式?
    二个是第三方请求的方式,是POST还是GET;此处我该了一个功能,因为原本的类库中,没有这个选项;
    三个是第三方的请求链接是什么???

    微博,github,豆瓣,qq中,qq的第三方的接口非常乱。

    但是这三个URL的链接,我已经配置到了oauth_lib里了,大家可以直接使用。
    附件地址;
    http://pan.baidu.com/s/1i3j6BKL​

    [3]http://www.aboutit.cn/blog/show/27

  • 相关阅读:
    RabbitMQ-RPC版主机管理程序
    FTP
    主机管理程序
    高级FTP
    选课系统
    电子银行购物商城
    计算器
    员工信息查询系统
    工资管理系统
    三级菜单
  • 原文地址:https://www.cnblogs.com/tony-jingzhou/p/4048737.html
Copyright © 2011-2022 走看看