Angular2 oidc-client не очищает файлы cookie для приложения mvc, когда я выхожу из приложения angular2

У меня есть сервер авторизации, который в настоящее время используется как моим приложением angular2, так и веб-приложением mvc.

Я реализовал авторизацию в приложении angular2 с помощью пакета javascript oidc-client. Все работает нормально, кроме функции выхода.

public logoff(): void {
    this.customAuthService.startSignoutMainWindow();
}

startSignoutMainWindow() {
    this.manager.getUser().then(user => {
        return this.manager.signoutRedirect({ id_token_hint: user.id_token }).then(resp => {
            console.log('signed out', resp);
            setTimeout(5000, () => {
                console.log('testing to see if fired...');
            });
        }).catch(function (err) {
            console.log(err);
        });
    });
};

Это код, который я использую для выхода из моего приложения angular2, которое использует oidc-client для реализации авторизации.

Но это не выход из моего другого приложения asp.net web mvc.

Но обратное работает нормально, т.е. если я выхожу из своего веб-приложения mvc, мое приложение angular перенаправляется на сервер авторизации для входа в систему.

Может ли кто-нибудь помочь исправить это, чтобы, если я выйду из своего приложения angular2, я смогу снова использовать приложение mvc без входа в систему.

Заранее спасибо.


person Mukil Deepthi    schedule 22.05.2018    source источник
comment
Что говорит ваш журнал, когда вы выходите из системы в приложении angular? У вас в журнале есть успешное сообщение?   -  person m3n7alsnak3    schedule 22.05.2018
comment
Для очистки сеанса вам необходимо выполнить дополнительную операцию при полном выходе из системы.   -  person Sohan    schedule 23.05.2018


Ответы (1)


  1. Инициировать выход:

    let userManager = new Oidc.UserManager(oidcSettings);
    public startLogout(): Promise<any>
            {
                return this.userManager.signoutRedirect();
            }
    
  2. полный выход

     public completeLogout(url?: string): Promise<any>{
    
        return this.userManager.signoutRedirectCallback(url)
            .then((user: OidcClientUser) =>
            {                  
                // This will clear the OpenID access tokens that is stored in the session
                return this.userManager.clearStaleState();
           });                 
    }
    

При выходе из системы вам нужно очистить сеанс и clientDeeplinks из браузера примерно так:

  public clear(ClientDeepLink?: string): void
        {
            if ((key) && (key.trim().length > 0))
            {
                this.$window.localStorage.removeItem(key);
            }
            else
            {
                this.$window.localStorage.clear();
            }
        }
person Sohan    schedule 23.05.2018
comment
Спасибо. Не могли бы вы сообщить мне, где позвонить в completeLogout ()? пример будет очень признателен. - person Mukil Deepthi; 23.05.2018
comment
Я написал logOUtController, который запускает окно выхода, когда пользователь нажимает кнопку выхода. Вам необходимо определить эти шаги в вашем контроллере и инициировать запрос оттуда. - person Sohan; 23.05.2018