Uzun süredir projelerime github ile giriş desteği sunmak istiyordum. Ancak bir türlü basit kod parçacıkları bulamadım bu konuyla ilgili. Github’un önerdiği sınıflar ise, dağ gibi büyük ve sadece login işlemi yapmak isteyenler için fazlasıyla gereksizdi. Bu yüzden en sonunda şurada bulduğum kullanımı basit bir sınıf haline getirdim ve benim gibi projelerine github login desteği sunmak isteyen sizlere yardımcı olabilmek adına paylaşmaya karar verdim.
Sınıf kodları;
<?php class GithubLogin { var $clientId; var $secret; var $authorizeUrl = 'https://github.com/login/oauth/authorize'; var $tokenUrl = 'https://github.com/login/oauth/access_token'; var $apiUrl = 'https://api.github.com/'; var $scope = 'user'; var $redirectUri; public function __construct($arr){ $this->clientId = $arr['client_id']; $this->secret = $arr['secret']; $this->redirectUri = $arr['redirect']; } public function login(){ if ( isset($_GET['code']) ){ $token = $this->request($this->tokenUrl, array( 'client_id' => $this->clientId, 'client_secret' => $this->secret, 'redirect_uri' => $this->redirectUri, 'code' => $_GET['code'] )); $_SESSION['access_token'] = $token->access_token; $this->redirect($this->redirectUri); } else { $this->redirect($this->authorizeUrl, array( 'client_id' => $this->clientId, 'redirect_uri' => $this->redirectUri, 'scope' => $this->scope )); } } public function user(){ if ( isset($_SESSION['access_token']) ){ return $this->request($this->apiUrl .'user'); } } public function request($url, $post = false, $headers = array()){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); if($post) curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post)); $headers[] = 'Accept: application/json'; if(isset($_SESSION['access_token'])) $headers[] = 'Authorization: Bearer ' . $_SESSION['access_token']; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($ch); return json_decode($response); } public function redirect($url, $params = null){ header('Location:'.$url.($params ? '?'.http_build_query($params) : null)); } public function logout(){ session_destroy(); $this->redirect($this->redirectUri); } }
Kullanımı;
<?php session_start(); ob_start(); require 'GithubLogin.class.php'; $github = new GithubLogin(array( 'client_id' => 'github uygulama client id', 'secret' => 'github uygulama secret key', 'redirect' => 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'] // yönlendirilecek adres )); // eğer kullanıcı uygulamaya izin vermiş ve bilgiler çekilmiş ise if ( $user = $github->user() ){ print_r($user); } else { $github->login(); } // çıkış işlemi için // $github->logout();
Uygulama Oluşturmak
Github.com üzerinden hesabınıza giriş yapın ve ayarlardan uygulamalar bölümüne gelin. Direk aşağıdaki bağlantı;
https://github.com/settings/applications
Burada üstte yeni uygulama oluşturabilir, alt kısımda ise izin verilen uygulamalarınızı görebilirsiniz. Uygulama oluşturduğunuzda size client id ve secret key verecek, bunları sınıfı çağırırken kullanın.