Ionic Inapp браузер Office 365 перенаправление входа в систему, не вызывает событие loadtop при перенаправлении - PullRequest
1 голос
/ 23 июня 2019

Я использую Keycloack login (Outlook-365 auth) для получения информации о профиле пользователя

Веб-приложение

Если я открою URL (https://myurl.com/login_new.php), он работает правильно, откройте Microsoft https://login.microsoft (окно входа в систему) и после ввода возвращает информацию профиля пользователя.

Мобильное приложение

То же самое мне нужно сделать в мобильном приложении, используя inappbrowser. Я написал следующий сценарий. Он открывает https://myurl.com/login_new.php и перенаправляет на https://login.microsoft (окно входа в систему)

В окне входа в систему после ввода имени пользователя и пароля оно застревает с отключенной кнопкой входа в систему. Ничего не происходит. но после приостановки приложения и возобновления активности оно открывает другое окно и дает пользователю информацию (почему работает только после паузы и возобновления работы устройства)? что я делаю не так?

Вот мой сценарий:

Здесь в скрипте после перенаправления на https://login.microsoft URL после ввода имени пользователя и пароля браузер loadstart событие сработало, но loadtop событие не сработало.

Пожалуйста, ознакомьтесь с решением этой проблемы.

    import { InAppBrowser,InAppBrowserOptions } from '@ionic-native/in-app-browser';

    constructor(private iab: InAppBrowser){} 

    keyclockSocialLogin(){
        const options: InAppBrowserOptions = {
            zoom: 'no',
            location:'yes',
            hardwareback: 'no',
            clearcache: 'yes',
            clearsessioncache: 'yes'
        }

        var browser =  this.iab.create('https://myurl.com/login_new.php', '_blank', options);
        browser.on("loadstart").subscribe((event) => {
            console.log(event);
        });

        browser.on("loaderror").subscribe((event) => {
            alert('load error');
        });

        browser.on('loadstop').subscribe(event => {
            browser.show();
            browser.executeScript({ code: "localStorage.setItem( 'username', '' );" });
            var loop = setInterval(function() {
                browser.executeScript({
                    code: "localStorage.getItem('username');"
                }).then(values => {
                    var name = values[ 0 ];
                    if ( name ) {
                        clearInterval( loop );
                        browser.close();
                    }
                });
            });
        });

        browser.on('exit').subscribe(event => {
            console.log('exit called');
        });

    }

...