Авторизация OAuth 2 + БД + классы для удобной работы
Добавлено: 30 авг 2013, 19:44
Как и обещал некоторый обитателям форума, я создам урок по серверной авторизации ВКонтакте OAuth 2 с базой данный, а также решил написать пару удобных классов для работы....
В уроке я не буду многословен, весь код прокомментирован, поэтому все должно быть понятно...
1) Создать приложение вк, при выборе типа указать Веб-сайт, в настройках узнаем ID и секретный ключ
2) Для работы нам нужна база данных
В бд создаем таблицу запросом
3) Файл настроек - config.php
4)index.php - главный файл
5)login.php - страница авторизации
6)callback.php - файл обратного вызова (сюда попадаем после авторизации вк)
7) Я написал вспомогательные классы для работы с OAuth 2 для ВК... их изменять не нужно(если вы не хотите изменить поля в бд или еще что-то...).. они используют сессии для хранения данных
Временный пример - http://288664.xxx01xxx.web.hosting-test.net/ (он может и не работать через какое-то время!)
Исходник - http://yadi.sk/d/mpTcvZqe8W6AW
P.S. удачи, если что - спрашивайте!
В уроке я не буду многословен, весь код прокомментирован, поэтому все должно быть понятно...
1) Создать приложение вк, при выборе типа указать Веб-сайт, в настройках узнаем ID и секретный ключ
2) Для работы нам нужна база данных
В бд создаем таблицу запросом
Код: Выделить всё
CREATE TABLE IF NOT EXISTS `users` ( `id` int(6) NOT NULL AUTO_INCREMENT, `vk_id` int(13) NOT NULL, `last_activity` int(13) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Код: Выделить всё
<?define("APP_ID", "***"); // id приложенияdefine("APP_SECRET", "***"); // secret приложенияdefine("PATH", "***"); // путь к скриптам в виде http://имя_сайта.com/папка/, обязательно со слешем в конце!define("SCOPE", "wall,notify,friends,status,photos"); // права приложения define("DB_HOST", "***"); // сервер БДdefine("DB_USER", "***"); // пользователь БДdefine("DB_PASS", "***"); // пароль от БДdefine("DB_NAME", "***"); // имя БД define("CALLBACK", "callback.php"); // перенаправить после авторизации session_start();?>
Код: Выделить всё
<?header("Content-Type: text/html; charset=utf-8");require_once("config.php"); // подключаем конфигrequire_once("oauth.class.php"); // подключаем класс oauthrequire_once("user.class.php"); // подключаем класс user if(!isset($_SESSION['access_token'])) { // если не авторизованы header('Location: '.PATH.'login.php'); exit();} $data = oauth::api("users.get",array("user_ids"=>$_SESSION['user_id'],"fields"=>"photo_big")); // отправляем запрос к апи$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); // создаем подключение к БД$db->set_charset("utf8"); // устанавливаем кодировкуif($data) { echo 'Привет, '.$data[0][first_name].' '.$data[0][last_name]. '</br><img src="'.$data[0][photo_big].'">'; $user = new user($db); // создаем экземпляр юзера, указывая подключение к бд $user->setLastActivity(); // записываем дату последней активности(сейчас) echo !$user->error ? '</br> Ваш id в БД: '.$user->db_id.'</br> Дата последней активности: '.$user->last_activity : $user->error; // выводим данные...}else { echo "Не удалось выполнить запрос к API VK :(";}?>
Код: Выделить всё
<?header("Content-Type: text/html; charset=utf-8");require_once("config.php"); // подключаем конфигrequire_once("oauth.class.php"); // подключаем класс oauth?><a href="<?=oauth::getLink()?>">Войти через ВК</a>
Код: Выделить всё
<?header("Content-Type: text/html; charset=utf-8");require_once("config.php"); // подключаем конфигrequire_once("oauth.class.php"); // подключаем класс oauthoauth::getAccessToken() ? header('Location: '.PATH.'index.php') : exit("Ошибка получения access_token"); // получаем access_token?>
Исходник - http://yadi.sk/d/mpTcvZqe8W6AW
P.S. удачи, если что - спрашивайте!