Codeigniter框架的Oauth2验证: Oauth2 SocialAuth for CodeIgniter
jopen
12年前
本程序修改自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 );