Codeigniter框架的Oauth2驗證: Oauth2 SocialAuth for CodeIgniter

jopen 11年前發布 | 93K 次閱讀 OAuth開發包 CodeIgniter

本程序修改自codeigniter-oauth2. 代碼默認適配codeigniter框架,簡單修改可以適用于任何框架或者非框架使用。有任何疑問或想法請issue或者pull request。

修改點

  • 可以運行與spark或者none-spark環境下。
  • 增加若干參數,支持國內各大平臺。
  • 加入csrf驗證
  • 原版providers被移動到provides/beyond the wall/文件夾中,使用者可根據需求自行移動出來使用。

支持的國內開放平臺

  • 新浪微博
  • QQ互聯
  • 騰訊微博
  • 百度
  • 360
  • 網易微博
  • 搜狐微博
  • 豆瓣
  • 淘寶
  • 天翼
  • 人人
  • 移動微博
  • 飛信
  • 開心網
  • 多說評論系統

演示站點

查看演示請戳這里

使用說明

  • 將Oauth2.php和oauth2文件夾扔進libraries里
  • application/config建立oauth2.php,內容如下
    //xx代表每個provider的唯一標識,也就是文件名的小寫
    $config['oauth2']['xx'] = array(
        'id' => 'your app client id',
        'secret' => 'your app client secret'
    );
    $config['oauth2']['xxx'] = array(
        'id' => 'your app client id',
        'secret' => 'your app client secret'
    );
  • 典型的控制器代碼
    <?php defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Sns extends CI_Controller {
    
        public function __construct()
        {
              parent::__construct();
            $this->session->userdata('is_login') AND redirect();
        }
    
        public function session($provider = '')
        {
            $this->config->load('oauth2');
            $allowed_providers = $this->config->item('oauth2');
            if ( ! $provider OR ! isset($allowed_providers[$provider]))
            {
                $this->session->set_flashdata('info', '暫不支持'.$provider.'方式登錄.');
                redirect();
                return;
            }
            $this->load->library('oauth2');
            $provider = $this->oauth2->provider($provider, $allowed_providers[$provider]);
            $args = $this->input->get();
            if ($args AND !isset($args['code']))
            {
                $this->session->set_flashdata('info', '授權失敗了,可能由于應用設置問題或者用戶拒絕授權.<br />具體原因:<br />'.json_encode($args));
                redirect();
                return;
            }
            $code = $this->input->get('code', TRUE);
            if ( ! $code)
            {
                $provider->authorize();
                return;
            }
            else
            {
                try
                {
                    $token = $provider->access($code);
                    $sns_user = $provider->get_user_info($token);
                    if (is_array($sns_user))
                    {
                        $this->session->set_flashdata('info', '登錄成功');
                        $this->session->set_userdata('user', $sns_user);
                        $this->session->set_userdata('is_login', TRUE);
                    }
                    else
                    {
                        $this->session->set_flashdata('info', '獲取用戶信息失敗');
                    }
                }
                catch (OAuth2_Exception $e)
                {
                    $this->session->set_flashdata('info', '操作失敗<pre>'.$e.'</pre>');
                }
            }
            redirect();
        }
    }
    
    /* End of file sns.php */
    /* Location: ./application/controllers/sns.php */
  • 參數返回說明
    <?php 
    //注意由于各個平臺不一致,不是所有的參數都有值
    return array(
        'via' => '', // provider 唯一標示
        'uid' => '', // 用戶在對應平臺的唯一標識
        'screen_name' => '', //用戶的顯示名稱,一般為昵稱
        'name' => '', // 用戶的其它名稱
        'location' => '', //用戶所在地
        'description' => '', // 用戶自我介紹
        'image' => '', // 頭像地址
        'access_token' => '', // access_token
        'expire_at' => '', // access_token 對應過期時間
        'refresh_token' => '' // refresh_token
    );

項目主頁:http://www.baiduhome.net/lib/view/home/1361158268900

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!