Не удается вызвать API с токеном авторизации в Angular

#javascript #angular

#javascript #angular

Вопрос:

Я пытаюсь вызвать API, чтобы получить текущие данные пользователя, и мне нужно прикрепить токен с Authorization заголовком. Однако не удается вызвать API с ответом на ошибку 500.

Он работает абсолютно нормально с помощью Postman и curl, и я получаю информацию о пользователе.

Код для него, как показано ниже:

 httpHeaders = new HttpHeaders ({         
  'Content-Type': 'application/json'
});

getCurrentUser(url){     
  var token = localStorage.getItem('token');     
  this.httpHeaders = this.httpHeaders.set('Authorization', `Bearer ${localStorage.getItem('token')}`);
  return this.http.get<any>(url, { headers: this.httpHeaders });
}
  

Я пробовал разные способы объединения токена с префиксом носителя, однако получал авторизацию в консоли как «token-string» носителя (не уверен, что это причина сбоя моего API).).

Комментарии:

1. Можете ли вы проверить, является ли это проблемой cors?

2. Пожалуйста, выполните a console.log(localStorage.getItem('token')) и проверьте, действительно ли он содержит токен. Вы также можете проверить в окне браузера DevTools. Он находится в разделе хранилища в Firefox и разделе приложений в Chrome.

3. Помимо избыточности localStorage.getItem('token') , все выглядит нормально. Код 500 ошибки указывает на внутреннюю ошибку сервера. Вы должны проверить свой сервер и проверить наличие журналов ошибок, которые могут предоставить вам дополнительную информацию о том, что происходит не так. Также может быть отсутствующий токен в вашем локальном хранилище.

4. Спасибо за ваши комментарии. CORS в порядке. Проблема была решена, как только я попробовал «Авторизацию»: Bearer ${JSON.parse(localStorage.getItem('token'))} .

Ответ №1:

   public getCurrentUser(url: string): Observable<unknown> {
    const token = localStorage.getItem('token');
    // Launch DevTools to step through the code in the debugger;
    debugger;
    // check if token is valid string as well
    if (token == null) {
      throw new Error('Authorization token not found');
    }
    // Use local object
    const httpHeaders = new HttpHeaders({
      'Content-Type': 'application/json',
      Authorization: `Bearer ${token}`,
    });
    return this.http.get<unknown>(url, { headers: httpHeaders });
  }
  

Если вы все еще получаете HTTP 500 internal server сообщение об ошибке от сервера:

  • Откройте DevTools и просмотрите сообщения об ошибках на Console Network вкладке или, если таковые имеются.
  • Просмотрите журналы сервера, если у вас есть к ним доступ.