Google API Kullanarak Google Hesabı ile Giriş Yap

Google ile Giriş Yap

Bu yazımızda web sitemize Google API’lerini kullanarak Google hesabımız ile giriş yapmayı anlatacağız. Bunu Google’ın desteklediği OAuth2 sayesinde Google PHP API library kullanarak çok kolay bir şekilde gerçekleştireceğiz. Bütün işlemlerimizi tek bir PHP dosyasıyla halledeceğiz. Buraya tıklayarak gerekli kütüphaneyi indirelim.

Google ile Login İçin Veritabanı

Öncelikle veritabanımızda ‘google_users’ adında bir tablo oluşturalım. PHPMyAdmin’i açıp aşağıdaki SQL kodlarını insert edip Beş sütunluk bir tablo oluşturalım.

CREATE TABLE IF NOT EXISTS `google_users` (
`google_id` decimal(21,0) NOT NULL,
`google_name` varchar(60) NOT NULL,
`google_email` varchar(60) NOT NULL,
`google_link` varchar(60) NOT NULL,
`google_picture_link` varchar(60) NOT NULL,
PRIMARY KEY (`google_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Google API ile Giriş Yap Sayfası

Giriş sayfamızın çalışabilmesi için Google tarafından bize bazı bilgilerin sağlanması gerekli. Bu bilgiler client id, secret key and developer key bilgileridir. Bunları Google API Console’dan elde edebilirsiniz. 

// Google API Console’dan Alınacak Bilgiler
$google_client_id       = ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxx’;
$google_client_secret   = ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxx’;
$google_redirect_url    = ‘http://localhost/google/’; // Onaydan sınra yönlendirilecek URL
$google_developer_key   = ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxx’;
// MySQL Bilgileri
$db_username = “xxxxxxxxx”;
$db_password = “xxxxxxxxx”;
$hostname = “localhost”;
$db_name = ‘xxxxxxxxx’;

 

Nereye ne yazılacağını değişken isimlerinden anlayabilirsiniz.

Kodlayacağımız kodların mantığını açıklayalım. Sitemize Google hesabı ile giriş yapmak isteyen kullanıcı Google ile Giriş Yap linkine tıklayacak ve Google’a yönlendirilecek. Google’a yönlendirilen kullanıcı Google’dan bilgilerine erişim için bize izin verecek. Onaydan sonra Google kullanıcıyı ve kullanıcının bilgilerini bize gönderecek. Biz de onları kullanıp kullanıcıyı giriş yaptıracağız. Şimdi kodlarımıza geçelim.

<?php

require_once ‘src/Google_Client.php’;
require_once ‘src/contrib/Google_Oauth2Service.php’;

session_start();

$gClient = new Google_Client();
$gClient->setApplicationName(‘Yazılım Sevdasına Giriş Yap’);
$gClient->setClientId($google_client_id);
$gClient->setClientSecret($google_client_secret);
$gClient->setRedirectUri($google_redirect_url);
$gClient->setDeveloperKey($google_developer_key);

$google_oauthV2 = new Google_Oauth2Service($gClient);

if (isset($_REQUEST[‘reset’]))
{
unset($_SESSION[‘token’]);
$gClient->revokeToken();
header(‘Location: ‘ . filter_var($google_redirect_url, FILTER_SANITIZE_URL));
}

if (isset($_GET[‘code’]))
{
$gClient->authenticate($_GET[‘code’]);
$_SESSION[‘token’] = $gClient->getAccessToken();
header(‘Location: ‘ . filter_var($google_redirect_url, FILTER_SANITIZE_URL));
return;
}

if (isset($_SESSION[‘token’]))
{
$gClient->setAccessToken($_SESSION[‘token’]);
}

if ($gClient->getAccessToken())
{
$user                 = $google_oauthV2->userinfo->get();
$user_id              = $user[‘id’];
$user_name            = filter_var($user[‘name’], FILTER_SANITIZE_SPECIAL_CHARS);
$email                = filter_var($user[’email’], FILTER_SANITIZE_EMAIL);
$profile_url          = filter_var($user[‘link’], FILTER_VALIDATE_URL);
$profile_image_url    = filter_var($user[‘picture’], FILTER_VALIDATE_URL);
$personMarkup         = “$email<div><img src=’$profile_image_url?sz=50′></div>”;
$_SESSION[‘token’]    = $gClient->getAccessToken();
}
else
{

$authUrl = $gClient->createAuthUrl();
}

echo ‘<!DOCTYPE HTML><html>’;
echo ‘<head>’;
echo ‘<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />’;
echo ‘<title>Login with Google</title>’;
echo ‘</head>’;
echo ‘<body>’;
echo ‘<h1>Login with Google</h1>’;

if(isset($authUrl))
{
echo ‘<a class=”login” href=”‘.$authUrl.'”><img src=”http://www.yazilimsevdasi.com/wp-content/uploads/2014/06/google-login-button.png” /></a>’;
}
else
{

$mysqli = new mysqli($hostname, $db_username, $db_password, $db_name);

if ($mysqli->connect_error) {
die(‘Error : (‘. $mysqli->connect_errno .’) ‘. $mysqli->connect_error);
}

$user_exist = $mysqli->query(“SELECT COUNT(google_id) as usercount FROM google_users WHERE google_id=$user_id”)->fetch_object()->usercount;
if($user_exist)
{
echo ‘Welcome back ‘.$user_name.’!’;
}else{

echo ‘Hi ‘.$user_name.’, Thanks for Registering!’;
$mysqli->query(“INSERT INTO google_users (google_id, google_name, google_email, google_link, google_picture_link)
VALUES ($user_id, ‘$user_name’,’$email’,’$profile_url’,’$profile_image_url’)”);
}

echo ‘<br /><a href=”‘.$profile_url.'” target=”_blank”><img src=”‘.$profile_image_url.’?sz=100″ /></a>’;
echo ‘<br /><a class=”logout” href=”?reset=1″>Logout</a>’;

echo ‘<pre>’;
print_r($user);
echo ‘</pre>’;
}

echo ‘</body></html>’;
?>

Kodlarımız bu şekilde olacak. Anlamadığınız yerleri sayfanın altında bulunan yorum bölümünden sorabilirsiniz. Projenin son halini indirmek için tıklayın.

Bir önceki yazımız olan PHP Config Dosyasını Şifreleme başlıklı makalemizde PHP Config Dosyasını Koruma, PHP Dersleri ve PHP ile Config Güvenliği hakkında bilgiler verilmektedir.

About This Author

Uzun yıllardır yazılım ile uğraşıyorum. PHP ile başladığım yazılım hayatıma şu an PHP'nin yanında Swift ve Python ile devam ediyorum. Bu güne kadar bir çok proje geliştirdim ve yeni projeler geliştirmeye de devam ediyorum. Bu sitede yazılımseverlere faydalı bilgiler vermeye, yazılım geliştirmeye, öğrendiklerimi paylaşmaya, yeni başlayanlara yol göstermeye ve onlara yardımcı olmaya çalışıyorum.

4 Comments

You can post comments in this post.


  • hocam bu php kodunu nereye nasıl ekliyoruz.Ben acemiyim.Birde “Google API Console’dan Alınacak Bilgiler” bu bilgileri nasıl alabiliriz.Biraz daha detaylı anlatırmısınız.Aslında video olsa çok makbule geçerdi.Saygılar ve teşekkürler

    Fuat 2 sene ago Reply


  • Hocam birde bunun için https falan gerekiyormu,şimdi aklıma geldi,gerekiyorsa hiç uğraşmayayım

    Fuat 2 sene ago Reply


  • sagolasın çok işime yaradı gerçekten

    Sosyal İçerik Platformları 1 sene ago Reply


  • I feel like Im regularly seeking interesting features you just read about a number of subjects, but I handle to add in the blog among our translates every day when you aeadadaggfac

    Johnd208 9 ay ago Reply


Post A Reply