Emlog开发之Coding授权登录
目前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登录了,至于数据库操作那块我就不写上了,赶紧去试试吧。
发表评论