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