Serpito

Login with Microsoft Live oAuth – Hotmail, Outlook.com hesabı ile bağlantı

Biraz geç oldu ama, Facebook ve Twitter‘dan sonra Hotmail Live Connect OAuth sistemi ile üye giriş uygulaması yapalım. Kullanım mantığı anlamında Facebook Login ve Twitter OAuth sistemlerinden farkı yok. Kullanıcının Hotmail, Outlook.com , SkyDrive ve Skype hesaplarını kullanarak tek tıkla websitenize üye olmasına imkan veriyor. 

Aslında azımsanmayacak derece büyük bir kullanıcı kitlesine hitap ediyor. Özellikle Facebook ve Twitter’ın OAuth sistemlerini dünya benimsedikten sonra Microsoft Live daha hızlı kitlelere ulaşacaktır. Şahsen ben, ilk Microsoft’un çıkarıp dünyaya sunduğu bir uygulamaya şüpheyle yaklaşırım. (Gelir modeli, Lisans konularındaki sicili yüzünden).

Bu uygulamada kullanıcının login olup database kayıtlarına erişim hususunu hazırlamadım. Gayet sade bir şekilde, Microsoft Live Connect’den dönen verileri report ediyoruz.

 

1- Microsoft Live App Kayıt Etmek

Microsft Live Developer Center‘da uygulamanızı kayıt etmek için Uygulamalarım sekmesinde uygulama oluştur bağlantısını tıklayın.

 

Yukarıdaki resimde görüldüğü üzere, Uygulama ismini girdikten sonra sözleşme kabulünden sonra aşağıdaki resimdeki görüntüyle karşılaşacaksınız.

   Etki Alanına uygulamanın çalışacağı domaini girmelisiniz.  Örnek:  http://demo.serpito.com

Daha sonra  uygulama detaylarını güncellemek için Temel Bilgiler Sekmesine geçip, uygulamanız için logo yükleyebilir, kullanım şartları, sözleşme bağlantılarınızı dahi kaydedebilirsiniz.

Uygulama yapısı için çalışan dosyaları önce inceleyelim;

  • \lib
    -- http.php
    --oauth_client.php
  • index.php
  • home.php
  • microsoft_login.php
Şimdi Kodlara Geçelim

microsoft_login.php


<?php
require('lib/http.php');
require('lib/oauth_client.php');
$client = new oauth_client_class;
$client->server = 'Microsoft';
$client->redirect_uri = 'http://'.$_SERVER['HTTP_HOST'].
dirname(strtok($_SERVER['REQUEST_URI'],'?')).'/microsoft_login.php';

$client->client_id = 'İstemci kimliği - Client ID';
$application_line = __LINE__;
$client->client_secret = 'İstemci parolası  - Microsoft Client Secret';

if(strlen($client->client_id) == 0
|| strlen($client->client_secret) == 0)
die('Please go to Microsoft Live Connect Developer Center page '.
'https://manage.dev.live.com/AddApplication.aspx and create a new'.
'application, and in the line '.$application_line.
' set the client_id to Client ID and client_secret with Client secret. '.
'The callback URL must be '.$client->redirect_uri.' but make sure '.
'the domain is valid and can be resolved by a public DNS.');

/* API izinleri
*/
$client->scope = 'wl.basic wl.emails'; // izin türleri
if(($success = $client->Initialize()))
{
if(($success = $client->Process()))
{
if(strlen($client->authorization_error))
{
$client->error = $client->authorization_error;
$success = false;
}
elseif(strlen($client->access_token))
{
$success = $client->CallAPI(
'https://apis.live.net/v5.0/me',
'GET', array(), array('FailOnAccessError'=>true), $user);
}
}
$success = $client->Finalize($success);
}
if($client->exit)
exit;
if($success)
{
session_start();
$_SESSION['userdata']=$user;
header("location: home.php"); // girişten sonra home.php e gidiyor
}
else
{
echo 'Error:'.HtmlSpecialChars($client->error);
}

?>

 

microsoft_login.php kodları oauth sistemini kullanarak  https://apis.live.net/v5.0/me  microsoft altyapısı ile bağlantı ve yetkilendirme işlerimlerini hallediyor. Başarılı giriş durumunda ise , home.php dosyasına yönlendiriliyor.

Burada mühim bir husus var, atlamayalım;


$client->scope = 'wl.basic wl.emails'; // izin türleri

Kullanıcının hesabına ait hangi tür datalara erişim istenildiğini burdaki scope değişkeninde tanımlıyoruz.

Verilebilecek tüm scope değerleri için Scopes and permissions sayfasını inceleyebilirsiniz.

 

home.php

 


<?php
@ob_start();
@session_start();
if($_GET&#91;'logout'&#93;){

unset ( $_SESSION );

session_destroy ();
header("Location: index.php");
}
?>

<h2><img src="live.png" /> Microsoft Live Oauth Detayları </h2>

<div style="float:right;">
<a href="?logout=ok">
<img src="logout.png"/>
<br> Çıkış
</a>
</div>

<?php
if (!isset($_SESSION&#91;'userdata'&#93;)) {
// Redirection to login page
header("location: index.php");
}
else
{
$userdata=$_SESSION&#91;'userdata'&#93;;
$name =$userdata->name;
$microsoft_id =$userdata->id;
$first_name =$userdata->first_name;
$last_name =$userdata->last_name;
$gender=$userdata->gender;
$email=$userdata->emails->account;
$email2=$userdata->emails->preferred;
$locale=$userdata->locale;
$birth_day=$userdata->birth_day.'-'.$userdata->birth_month.'-'.$userdata->birth_year;
}

?>

<h2> Hoşgeldin<?php echo $name; ?></h2>
<div>
<img src="https://apis.live.net/v5.0/<?=$microsoft_id?>/picture" />
<br>
<b>Kullanıcı İsim:</b> <?php echo $name; ?><br/>
<b>E-posta:</b> <?php echo $email; ?><br/>
<b>E-mail tercihi:</b> <?php echo $email2; ?><br/>
<b>İsim:</b> <?php echo $first_name; ?><br/>
<b>Soyisim:</b> <?php echo $last_name; ?><br/>
<b>Microsoft Id</b> <?php echo $microsoft_id; ?><br/>
<b>Cinsiyet:</b> <?php echo $gender; ?><br/>
<b>Doğum:</b> <?php echo $birth_day; ?><br/>
</div>

home.php kodlarında üye giriş kontrolü veya üye kayıt yapmak istersiniz diye, çok kısa tuttum, siz dilediğiniz gibi db işlemlerinizi gerçekleştirebilirsiniz.