Регистрация в один клик от Google

12-10-26 Php PHP 0

Здравствуйте, уважаемые читатели Easy-Code.ru. В этом уроке мы сделаем регистрацию для сайта с помощью Google. Сервисы Гугла предоставляют множество полезных возможностей, одна из них — это регистрация с помощью аккаунта Google. Все у кого есть аккаунт могут нажатием одной кнопки зарегистрироваться у вас на сайте с их почтой, именем и фото.

Google использует OAuth2 протокол для организации обмена информацией между вашим сервером и серверами Гугла. Для серверной части этого процесса мы будем использовать PHP библиотеку Google, которая сделает все за нас.

Использование подобной системы упрощает процесс регистрации/авторизации пользователей на сайте и уменьшает объем вашей работы:

  • Нет необходимости в создании регистрации и форм для логина
  • Не надо писать функцию восстановления пароля
  • Моментальная регистрация: вы получаете почту, имя и фото пользователя в один клик.
  • Почта уже проверена Google, не надо отправлять письмо подтверждения.
  • Высокая безопасность, предоставленная Гуглом.

Конечно, все это работает, только если у человека есть аккаунт Google.

Настройка

Для начала необходимо создать новое приложение по этой ссылке Google’s API Console. Следуйте этой инструкции. После завершения полученные ключи надо будет поместить в setup.php.

Запустите schema.sql (найдете его в исходниках) с помощью phpMyAdmin или другой системы для управления MySQL. Так мы создадим таблицу glogin_users, в которой будем хранить информацию о пользователях. После необходимо занести информацию для соединения с бд в файл setup.php.

PHP

Наша регистрация использует систему авторизации Google. Это значит, сто посетители будут переходить по ссылке с нашей страницы на страницу Google, где им будет предложено предоставить доступ к своим данным нашему приложению. Потом их перенаправят обратно на наш сайт. Таким образом мы получим информацию о пользователе. Краткое описание процесса:

  • Когда посетитель жмет на “Sign in with Google” его перенаправляет на страницу авторизации Google, где он видит к каким данным требует доступ наше приложение.
  • Если пользователь соглашается, он перенаправляется обратно на наш сайт, со специальным кодом в URL, используя который мы получаем информацию о нем.
  • Далее мы записываем полученную информацию в базу на нашем сервере.

Для работы с базой мы будем использовать небольшую библиотеку Idiorm library, которую вы найдете в исходниках.

Структура нашего PHP кода следующая:

  • index.php главный файл, в котором содержится форма
  • setup.php – файл, где хранится информация о соединении с бд и ключи, полученные из Google’s API Console;
  • Папка library – содержит Idiorm library, Google’s PHP library, и класс для работы со временем.

Рассмотрим код index.php

require 'setup.php';

// создаем клиент Google API
$client = new apiClient();

// настраиваем
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setDeveloperKey($api_key);
$client->setRedirectUri($redirect_url);
$client->setApprovalPrompt(false);
$oauth2 = new apiOauth2Service($client);

// если задан этот параметр, то пользователь был перенаправлен обратно на сайт
if (isset($_GET['code'])) {

	// после вызова этого метода мы можем получить информацию о пользователе
	$client->authenticate();

	// получаем информацию
	$info = $oauth2->userinfo->get();

	// ищем пользователя в базе
	$person = ORM::for_table('glogin_users')->where('email', $info['email'])->find_one();

	if(!$person){
		// если не нашли, зарегистрируем его

		$person = ORM::for_table('glogin_users')->create();

		// достаем значения, которые будут занесены в бд
		$person->email = $info['email'];
		$person->name = $info['name'];

		if(isset($info['picture'])){
			// если у пользователя есть фото
			$person->photo = $info['picture'];
		}
		else{
			// если нет, используем стандартную
			$person->photo = 'assets/img/default_avatar.jpg';
		}

		// запись в бд
		$person->save();
	}

	// создаем сессию с идентификатором пользователя
	$_SESSION['user_id'] = $person->id();

	// редирект на страницу демонстрации
	header("Location: $redirect_url");
	exit;
}

// выход
if (isset($_GET['logout'])) {
	unset($_SESSION['user_id']);
}

$person = null;
if(isset($_SESSION['user_id'])){
	// достаем пользователя из бд
	$person = ORM::for_table('glogin_users')->find_one($_SESSION['user_id']);
}

Разберем, что происходит в данном коде. Мы проверяем задан ли элемент code в массиве $_GET. Как говорилось выше, этот элемент указывает на то, что пользователь разрешил доступ и был перенаправлен обратно. После мы запрашиваем информацию о пользователе и записываем в базу. Идентификатор пользователя мы записываем в сессию, таким образом мы будем знать, что пользователь авторизован.
Также мы создаем переменную $person. В ней содержится объект, который вернула библиотека для работы с бд (Idiorm library), этот объект содержит все поля из таблицы glogin_users. Использовать этот объект мы будем ниже.

HTML

HTML код также содержится в index.php, поэтому мы имеем доступ к переменной $person, которую будем использовать для вывода имени и фотографии пользователя.

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Google Powered Login Form | Tutorialzine Demo</title>

        <!-- The stylesheets -->
        <link rel="stylesheet" href="assets/css/styles.css" />
        <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans+Condensed:300,700" />

        <!--[if lt IE 9]>
          <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->
    </head>

    <body>

		<h1>Login Form</h1>
        <div id="main">

			<?php if($person):?>
				<div id="avatar" style="background-image:url(<?php echo $person->photo?>?sz=58)"></div>
				<p>Welcome, <b><?php echo htmlspecialchars($person->name)?></b></p>
            	<p>You registered <b><?php echo new RelativeTime($person->registered)?></b></p>
            	<a href="?logout">Logout</a>
			<?php else:?>
            	<a href="<?php echo $client->createAuthUrl()?>">Sign in with Google</a>
            <?php endif;?>

        </div>

    </body>
</html>

Мы проверяем, инициализирована ли переменная $person и выводим имя и фото. В противном случае выводим форму для регистрации.

Все готово! Вы можете добавить регистрацию от Google к уже существующему сайту, также можно объединить ее с другими соц сетями, поддерживающими OAuth авторизацию.

Хочешь получать статьи на почту?

Подпишись на обновления!
* Ваш email не будет разглашен/продан. Вы сможете отписаться в любое время.

Нет комментариев

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *