Неопределенный ответ на запрос входа в систему после обновления с Http (ng2) до HttpClient (ng6) - PullRequest
0 голосов
/ 11 июня 2018

Мне не удается получить доступ к ответу на мой запрос на вход в систему после обновления с Angular Http до HttpClient.Это рабочий код для Http:

login(username: string, password: string): Observable<boolean> {

    let headers: Headers = new Headers();
    headers.append("Authorization", "Basic " + btoa(username + ":" + password));
    headers.append("Content-Type", "application/x-www-form-urlencoded");

    return this.http.post('http://localhost:8080/oauth/login', '', {headers: headers, withCredentials: true})
               .map((response: Response) => {
                 if (response.status === 200) {
                   localStorage.setItem('setCookie', resHeaders.get("Set-Header"));
                   window.location.href = "http://localhost:8080/oauth/authorize?client_id=api&response_type=token&redirect_uri=http://" + document.location.host + "/%23/token//%3F";
                   return true;
                 } 
                 else {
                   return false;
                 }
               });
  }

Это код, который я использую для HttpClient:

  login(username: string, password: string): Observable<boolean> {

    let httpHeaders : HttpHeaders = new HttpHeaders()
      .set("Authorization", "Basic " + btoa(username + ":" + password))
      .set("Content-Type", "application/x-www-form-urlencoded");

    return this.http.post('http://localhost:8080/oauth/login', '', {headers: httpHeaders, withCredentials: true})
      .pipe(
        map(res => {  // res: undefined
          if (res) {
            console.log("res: " + res);
          }
          else {
            console.log("Didn't get any response");
          }
        })
      )
  }

Выход из кода HttpClient равен Didn't get any response. HttpClient Docs использует pipe, как в моем коде выше, но res также не определено, если я просто использую .map, как я делаю с Http.Я изучил фактические запросы и ответы в Chrome, и они идентичны рабочему коду, использующему Http.Итак, я знаю, что проблема в том, что я делаю что-то не так, когда пытаюсь получить доступ к объекту ответа.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Вы должны использовать функцию подписки сейчас для доступа к вашему объекту Response.

Обратите внимание, что вы сейчас вернете объект подписки.Попробуйте что-то вроде этого:

return this.http.post('http://localhost:8080/oauth/login', '', {headers: httpHeaders, withCredentials: true})
        .subscribe(res => {
            console.log("res: " + res);
                },
    error => {
    console.log("error" + error);
    }

);

0 голосов
/ 11 июня 2018

Кажется, что все, чего не хватало, это то, что мне нужно было добавить observe: 'response' к параметрам запроса, например:

  login(username: string, password: string): Observable<boolean> {

    let httpHeaders : HttpHeaders = new HttpHeaders()
      .set("Authorization", "Basic " + btoa(username + ":" + password))
      .set("Content-Type", "application/x-www-form-urlencoded");

    return this.http.post('http://localhost:8080/oauth/login', '', {headers: httpHeaders, withCredentials: true, observe: 'response'})
      .pipe(
        map(res => {  // res: [object Object]
          if (res) {
            console.log("res: " + res);
          }
          else {
            console.log("Didn't get any response");
          }
        })
      )
  }

Это позволяет мне получить доступ к заголовкам ответа, которые мне нужны, в соответствии с документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...