1

При загрузке приложения происходит проверка куков пользователя, если в них есть токен, делаем запрос и проверяем живой ли этот токен. Если живой то все нормально мы разрешаем идти дальше, а если нет, то отправляем на страницу авторизации. Суть вопроса такова, как заставить приложение ждать ответа от сервера, а только потом выполняться дальше?

//

import { Component, OnInit } from '@angular/core'; import { CookieService } from 'ngx-cookie'; import { Core } from './shared/core'; import { HttpService } from './service/http.service'; import { Router } from '@angular/router'; @Component({ selector: 'my-app', template: <router-outlet></router-outlet>, providers: [HttpService], })

export class AppComponent implements OnInit{

constructor(private router: Router, private _cookieService: CookieService, private httpService: HttpService) { }

ngOnInit(){ alert("Отправили запрос"); if (this._cookieService.get('token')) { this.httpService .chekToken(this._cookieService.get('token')).then(data => { if(data['status']== 1){ Core.id = data['user_id']; Core.token = data['token']; alert("Получили ответ"); } else { this.router.navigate(['/auth']); } }); }else { this.router.navigate(['/auth']); } }

}

Собственно сервис </p>

import {Injectable} from '@angular/core';
import {Http} from '@angular/http';
import {Response, Headers, URLSearchParams} from '@angular/http';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/toPromise';

@Injectable()
export class HttpService{

  constructor(private http: Http){ }


  postAuth(email:string, password:string){
    var params = new URLSearchParams();
    params.set('email', email);
    params.set('password', password);

    let headers = new Headers({ 'Content-Type' : 'application/x-www-form-urlencoded; application/json;charset=utf-8; charset=UTF-8' });

    return this.http.post('https://url/', params, { headers: headers })
      .map((resp:Response)=>resp.json())
      .catch((error:any) =>{return Observable.throw(error);});
  }
  chekToken(token:string){
    var params = new URLSearchParams();
    params.set('token',token)
    let headers = new Headers({ 'Content-Type' : 'application/x-www-form-urlencoded; application/json;charset=utf-8; charset=UTF-8' });

    return this.http.post('https://url/', params, { headers: headers })
      .map((resp:Response)=>resp.json()).toPromise();
  }
}
Pantera
  • 546
  • 2
  • 5
  • 16
Vlad
  • 11

0 Answers0