window.postMessage()
У меня примерно так организована серверная OAuth2 авторизация в одном проекте. По клику «Войти через ХХХ» открывается новое окно, с URL авторизации в соц.сети с требуемыми параметрами. Там пользователь при необходимости логинится, даёт своё разрешение на доступ к данным. Его перекидывает на указанный URL на моём сервере с параметром
&code=xxxxx
, который уже мой сервер обменивает напрямую с соц.сетью на токен.
При этом пользователю мой сервер в ответ на посадку с параметром code показывает какое-то минимальное содержание, главным образом, JS, который делает две вещи:
- отправит
postMessage()
в родительское окно с основным приложением – сообщит о результате: получено разрешение или пользователь что-то накосячил или передумал;
- закроет своё окно.
Основное же окно после открытия дочернего с авторизацией, сидит, ждёт сообщение. Раз в секунду смотрит, существует ли ещё открытое дочернее окно, не закрыто ли оно (вдруг, пользователь психанул и просто закрыл то окно с авторизацией).
Получив сообщение об успешной авторизации можно двигаться дальше.
Получив сообщение об отказе авторизации или узнав, что дочернее окно просто пропало – вывести сообщение "так не пойдет, нужна авторизация. _Повторить?_"