Angular6 Post Method Неправильный вывод

Я использую метод отправки для моего входа в Angular 6, я всегда получал Failed to Login, когда я даже давал правильные учетные данные для входа, и когда я отлаживаю свой код, я обнаружил, что его отправляющие заголовки равны нулю, даже если я включил свои заголовки.

Это мой код, когда я отлаживаю, и его показывающий ответ не определен:

case 'json':default:return res$.pipe(map(function (res) { return res.body; }));

Мой файл TS

import { Injectable } from '@angular/core';
import { RequestOptions, Headers, Response } from '@angular/http';
import { map } from 'rxjs/operators';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class AuthService {

  baseUrl = "http://localhost:3000/api/auth";
  userToken: any;
  httpOptions = {
    headers: new HttpHeaders({
      'Content-Type': 'application/json'
    })
  };

  constructor(private http: HttpClient) {}

  login(loginData: any) {
    return this.http.post(this.baseUrl, loginData, this.httpOptions)
    .pipe(
      map((response: Response) => {
        const user = response.json();
        if (user) {
          localStorage.setItem('token', user.token);
          this.userToken = user.token;
        }
      })
    )
  }

}

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

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
53
1

Ответы 1

HttpClient делает response.json() за вас, поэтому он возвращает только тело ответа. Также вам, вероятно, не нужно устанавливать какие-либо параметры заголовка, по умолчанию это должно быть приложение / json.

login(loginData: any) {
  return this.http.post(this.baseUrl, loginData);

}

Должно хватить. Это вернет наблюдаемое, на которое вы можете подписаться.

Итак, в своем компоненте вы можете:

this.authService.login(data).subscribe((user) => {
if (user) {
 localStorage.setItem('token', user.token);
}
else {
// What to do when there is no token
// Ideally you would want to throw an error on the server along the     
// lines of code 403. 
} 
});

Если вы все же вернете код состояния, например, 403, вам нужно поймать ошибку, например: https://www.learnrxjs.io/operators/error_handling/catch.html

Спасибо за ответ ... Но я не могу понять, так как я новичок в Angular, поэтому вы можете подробно объяснить ... Если возможно, с каким-либо ответом

Gvs Akhil 31.08.2018 19:55

Да, теперь я вошел в систему в своей консоли, но как назначить это значение токена моему localStorage bcs, его предоставление не может присвоить значение объекта строке ....

Gvs Akhil 31.08.2018 20:44

Какой тип user.token? Если это объект, вам нужно будет сделать что-то вроде JSON.stringify (user.token) раньше.

Christian S. 31.08.2018 20:50

Нет, я неправильно прокомментировал .... Теперь это мой код this.authservice.login (this.loginData) .subscribe ((user) => {if (user) localStorage.setItem ('token', user.token); console.info ("Logged In");} ... Его токен предоставляющего свойства не существует для объекта типа

Gvs Akhil 31.08.2018 20:54

С этим кодом вы всегда будете в console.info авторизоваться, даже если пользователь не определен. console.info (пользователь), пожалуйста.

Christian S. 31.08.2018 20:56

Я не уверен, что понимаю, что вы имеете в виду. Если вы подписались ((user) => {console.info (user);}); Что в результате?

Christian S. 31.08.2018 21:06

Я получаю токен в консоли

Gvs Akhil 31.08.2018 21:06

Тогда у вас нет объекта пользователя с токеном свойства, но ваш сервер возвращает токен напрямую. Я обновил код, чтобы отразить это.

Christian S. 31.08.2018 21:08

Я получаю это в качестве вывода {токен: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpbiI6I… zM2fQ.ek‌ Tr_2VSq8sbfxKBeViJcq‌ HXoqZwOlQ с помощью ключа Y9X, пожалуйста, исправьте этот объект, если я ... я не прав

Gvs Akhil 31.08.2018 21:10

Получение этой ошибки, если я добавил код, который вы редактировали ... Аргумент типа «Объект» не может быть назначен параметру типа «строка».

Gvs Akhil 31.08.2018 21:12

Вы правы, тогда неправильно поняли ваш последний комментарий. user.token определяется в этом случае.

Christian S. 31.08.2018 21:12

Нет проблем, но если я использую user.token, его ошибку выдачи, токен свойства не существует для объекта типа

Gvs Akhil 31.08.2018 21:13

Позвольте нам продолжить обсуждение в чате.

Christian S. 31.08.2018 21:40

Другие вопросы по теме