殷德瑶博客
喜欢的歌,静静地听!喜欢的人,远远地看!

Emlog开发之Coding授权登录

殷德瑶 2016-5-27 emlog教程 评论 1254 次


目前Emlog已经支持腾讯QQ,github,百度,支付宝,新浪微博,Github,中国开源中心这几家网站授权登录了,最近也忙着搞Coding的一个项目,然后看见了他们的开放平台,看见了其中的Oauth授权,然后忍不住的就把Emlog支持Coding登录的给搞了下来,以下是支持此登录方法。

第一步创建Coding应用:

    1、登录coding官网(没有账户可以注册一个)

    2、点击左侧账户 ->应用管理 -> 创建应用

    3、创建完应用您即可获取的到 Client ID 和 Client Secret 和回调地址(此地址由您自己设置)


第二步先创建以下文件:

    coding.php => Coding类

    config.php => 数据配置中心

    callback.php => 授权回调页面

    index.php => 授权访问主页


第三步将以下代码放入至coding.php中:

	
<?php 
/** 
 * Coding API client for PHP 
 * 
 */ 
class Coding{ 
 public $api_url='https://coding.net/'; 
  
 public function __construct($client_id, $client_secret, $access_token=NULL){ 
 $this->client_id=$client_id; 
 $this->client_secret=$client_secret; 
 $this->access_token=$access_token; 
 } 
  
 //生成授权网址 
 public function login_url($callback_url, $scope=''){ 
 $params=array( 
 'response_type'=>'code', 
 'client_id'=>$this->client_id, 
 'redirect_uri'=>$callback_url, 
 'scope'=>$scope 
 ); 
 return 'https://coding.net/oauth_authorize.html?'.http_build_query($params); 
 } 
  
 //获取access token 
 public function access_token($callback_url, $code){ 
 $params=array( 
 'grant_type'=>'authorization_code', 
 'code'=>$code, 
 'client_id'=>$this->client_id, 
 'client_secret'=>$this->client_secret 
 ); 
 $url='https://coding.net/api/oauth/access_token'; 
 return $this->http($url, http_build_query($params), 'POST'); 
 } 
  
 //获取登录用户信息 
 public function me(){ 
 $params=array(); 
 return $this->api('api/account/current_user', $params); 
 } //调用接口 
 public function api($url, $params=array(), $method='GET'){ 
 $url=$this->api_url.$url; 
 $params['access_token']=$this->access_token; 
 if($method=='GET'){ 
 $result=$this->http($url.'?'.http_build_query($params)); 
 }else{ 
 $result=$this->http($url, http_build_query($params), 'POST'); 
 } 
 return $result; 
 } 
  
 //提交请求 
 private function http($url, $postfields='', $method='GET', $headers=array()){ 
 $ci=curl_init(); 
 curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE);  
 curl_setopt($ci, CURLOPT_RETURNTRANSFER, 1); 
 curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30); 
 curl_setopt($ci, CURLOPT_TIMEOUT, 30); 
 if($method=='POST'){ 
 curl_setopt($ci, CURLOPT_POST, TRUE); 
 if($postfields!='')curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); 
 } 
 $headers[]='User-Agent: Coding.PHP(ThemesField)'; 
 curl_setopt($ci, CURLOPT_HTTPHEADER, $headers); 
 curl_setopt($ci, CURLOPT_URL, $url); 
 $response=curl_exec($ci); 
 curl_close($ci); 
 $json_r=array(); 
 if($response!='')$json_r=json_decode($response, true); 
 return $json_r; 
 } 
} 


第四步将以下代码存放至config.php中:


<?php 
//配置文件 
define('Client_ID','应用ID'); 
define('Client_Secret','应用私钥'); 
define('Callback_Url','授权回调网址'); 


第五步将以下代码存放至callback.php中:


<?php 
session_start(); 
require_once('config.php'); 
require_once('coding.php'); 
if(isset($_GET['code']) && $_GET['code']!=''){ 
 $o=new Coding(Client_ID,Client_Secret); 
 $result=$o->access_token($callback_url, $_GET['code']); 
} 
if(isset($result['access_token']) && $result['access_token']!=''){ 
 $_SESSION['Coding_t']=$result['access_token']; 
 $Coding_t=isset($_SESSION['Coding_t'])?$_SESSION['Coding_t']:''; 
 $Coding=new Coding(Client_ID,Client_Secret, $Coding_t); 
 print_r($Coding->me()); 
}else{ 
 echo '授权失败'; 
} 
echo '<br/><a href="index.php">返回</a>'; 


第六步将以下代码存放至index.php中:

<?php 
session_start(); 
require_once('config.php'); 
require_once('coding.php'); 
$Coding_t=isset($_SESSION['Coding_t'])?$_SESSION['Coding_t']:''; 
$Coding=new Coding(Client_ID,Client_Secret); 
if(ISLOGIN){ 
 emDirect(BLOG_URL); 
}else{ 
 $login_url=$Coding->login_url(Callback_Url,'user'); 
 echo "<a href=\"{$login_url}\" target=\"_blank\">点击登录</a>"; 
} 

完成以上六步骤即可将Emlog支持Coding登录了,至于数据库操作那块我就不写上了,赶紧去试试吧。



发表评论


粤ICP备15078261号 Powered by 黑暗之夜
Theme by 殷德瑶博客