Проста клиентска и сървърна авторизация на потребител на сайт на Ajax с помощта на VK API

Но първо, нека дефинираме нашата задача малко по-подробно:
Първо, позволете ми да изясня веднага, че $ функциите, използвани тук, не са jQuery. Целта им обаче може да не е интуитивна, така че ще обясня какво прави тази или онази функция. Независимото им внедряване не би трябвало да е трудно, точно както прехвърлянето на целия код към jQuery.
Така че $.ready(function) е манипулаторът за DOMContentLoaded; $.js(текст) - зарежда javascript файл асинхронно; $(елемент) - връща обвивка върху елемента DOM възел; $(element).add(node) - създава нов дъщерен възел за елемент и връща обвивка върху него; $(element).html(string) е обвивка за element.innerHTML = string.
Следователно клиентската част може да се счита за завършена, но си струва по някакъв начин да предупредим потребителите за възможността за блокиране на прозореца за потвърждение от техния браузър.
За съжаление втората точка, а именно пренасочването на браузъра, не винаги работи, по-точно не работи никъде, освен в IE, когато потребителят за първи път разреши на приложението достъп до неговите данни за първи път. И веднага щом разработчиците не се извращават, само за да получат желания код.
Освен това отварянето на допълнителен прозорец отново е свързано с опасност той да бъде блокиран.
За щастие, ако знаем връзката за отваряне на прозореца, има много добри начини да го отворим, без да бъде блокиран. Например, добрият стар таг iframe все още е в редиците на HTML стандарта и е най-подходящ за нашата задача.
Второ, ако възникне пренасочване и страница от нашия домейн се отвори в рамката, тогава можем да получим достъп до главния прозорец от рамката и автоматично да изпълним функциятазатваряне на рамката. В същото време сървърът вече ще имаaccess_token, който ще запазим в сесията и чрез изпълнение на заявки към сървъра от главния прозорец ще можем да получаваме отговори. Това няма да презареди страницата, което напълно решава проблема ни.
Реализацията на класа за достъп до VK API чрез OAuth в PHP може лесно да бъде намерена в github, което направих (PHP >= 5.4). (Съвсем случайно се оказа, че този клас най-вероятно е написан от habruser vladkens, за което много му благодаря)
Сега да преминем към най-интересното.
Ще изпращаме заявки до тази страница, като използваме метода POST, където параметърът на метода съдържа името на метода, който искаме да изпълним на сървъра.
Остава само да направите страницата, към която се прави пренасочването.
Тук просто съхранявамеaccess_tokenкато променлива на сесията, така че скриптът, обработващ Ajax заявките, да може да я използва. Освен това, ако тази страница се отвори в рамка, ние наричаме метода на главния прозорец, който изисква списъка с приятели на VKontakte от сървъра, и метода, който затваря рамката.
