Ionic 2, как перенаправить на страницу входа, когда я вызываю безопасный URL-адрес

Я хотел знать, как перенаправить на страницу входа в систему, когда я вызываю безопасный URL-адрес, зная, что вы не можете внедрить navController в службу

Я создал свой расширенный сервис Http следующим образом:

@Injectable()
export class CustomHttp extends Http {

  constructor (backend: XHRBackend, options: RequestOptions) {
    let token = localStorage.getItem('auth_token'); 

    options.headers.set('Authorization', `Bearer ${token}`);
    super(backend, options);
  }

  request(url: string|Request, options?: RequestOptionsArgs): Observable<Response> {
    let token = localStorage.getItem('auth_token');
    if (typeof url === 'string') { 
      if (!options) {
        // let's make option object
        options = {headers: new Headers()};
      }
      options.headers.set('Authorization', `Bearer ${token}`);
    } else {
      url.headers.set('Authorization', `Bearer ${token}`);
    }
    return super.request(url, options).catch(this.catchAuthError(this));
  }

  private catchAuthError (self: CustomHttp) {
    return (res: Response) => {
     if (res.status === 401 || res.status === 403) {

     }

      }
      return Observable.throw(res);
    };
  }
}

благодарю вас


person taktouk    schedule 23.02.2017    source источник


Ответы (1)


Мы можем использовать события в вашем файле app.component.ts:

import { Events } from 'ionic-angular';

затем обязательно объявите событие:

public events: Events

и изнутри компонента вызовите функцию:

listenToEvents() {
    this.events.subscribe('user:logout', () => {
      this.nav.setRoot(LoginPage);
    });
  }

и, наконец, в вашем сервисе вы можете опубликовать событие:

private catchAuthError (self: CustomHttp) {
    return (res: Response) => {
     if (res.status === 401 || res.status === 403) {
       this.events.publish('user:logout');
     }

      }
      return Observable.throw(res);
    };
  }
person Jay Ordway    schedule 24.02.2017
comment
Понятно, что OP не хочет иметь код для перехода на страницу входа в систему, где бы он ни вызывал службу. Вместо этого он/она хочет, чтобы его пользовательский Http автоматически переходил на страницу входа, если он не вошел в систему. - person n00b; 24.02.2017
comment
Я имел в виду обратный вызов успеха, я ничего не указывал на ошибку - person Jay Ordway; 24.02.2017
comment
извините, я имею в виду страницу входа. вы предлагаете иметь код для установки корня навигации в каждом компоненте, использующем эту службу. Это то, чего ОП пытается избежать. то, что хочет OP, вероятно, противоречит определению MVC - person n00b; 24.02.2017
comment
Ответ, вероятно, достижим с использованием событий. Я могу удалить свой голос против, если вы отредактируете свой ответ - person n00b; 24.02.2017