@adam_carraway

Как правильно реализовать передачу данных между окон?

Сейчас через обычный запрос я получаю данные:
axios.post('/auth/'+this.user_id+'/'+this.provider+'/linked',{
                    provider: this.provider,
                    user: this.user_id,
                }).then(res => {
                    console.log(res.data)
                });

Как получить эти же данные только через всплывающее окно? Чтобы при нажатии на кнопку открывалось маленькое окно и из него я получал данные в текущее окно, что-то наподобие авторизации через социальные сети.
Может у кого есть пример кода?
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
window.postMessage()

У меня примерно так организована серверная OAuth2 авторизация в одном проекте. По клику «Войти через ХХХ» открывается новое окно, с URL авторизации в соц.сети с требуемыми параметрами. Там пользователь при необходимости логинится, даёт своё разрешение на доступ к данным. Его перекидывает на указанный URL на моём сервере с параметром &code=xxxxx, который уже мой сервер обменивает напрямую с соц.сетью на токен.

При этом пользователю мой сервер в ответ на посадку с параметром code показывает какое-то минимальное содержание, главным образом, JS, который делает две вещи:
  • отправит postMessage() в родительское окно с основным приложением – сообщит о результате: получено разрешение или пользователь что-то накосячил или передумал;
  • закроет своё окно.


Основное же окно после открытия дочернего с авторизацией, сидит, ждёт сообщение. Раз в секунду смотрит, существует ли ещё открытое дочернее окно, не закрыто ли оно (вдруг, пользователь психанул и просто закрыл то окно с авторизацией).
Получив сообщение об успешной авторизации можно двигаться дальше.
Получив сообщение об отказе авторизации или узнав, что дочернее окно просто пропало – вывести сообщение "так не пойдет, нужна авторизация. _Повторить?_"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы