Настройте проект angular для отправки http cookie в режиме разработки

Я написал бэкэнд PHP, который проверяет, исходит ли запрос от авторизованного пользователя. Это делается так же просто, как использовать следующий код

if (!isset($_SESSION["id"])){
    http_response_code(403);
    die("Error. Unauthorized user.");  
}

Это нормально в производстве, но в процессе разработки я сталкиваюсь с проблемами, потому что приложение angular, работающее на локальном сервере разработки, не отправляет файлы cookie (и сервер не хранит их).

Как я могу настроить сервер / приложение angular для отправки файлов cookie сеанса во время разработки? Я использую следующий код для запуска приложения

ng serve --port 4000 --host example.com --ssl true --sslKey path --sslCert path2

ОБНОВИТЬ

Я не хочу менять логику своего приложения или что-то в этом роде. это единственный способ сделать разработку управляемой. Мне нужно отправить файлы cookie на ng serve или настроить сервер узла на отправку файлов cookie, когда он работает. Кроме того, если одна версия используется в производстве, а другая в разработке (как следует из строго подразумеваемого ответа), мне нужно менять ее каждый раз, когда нажимаете обновление, а затем меняете его обратно, оставляя мне 2 версии. ужасная, ужасная практика

ОБНОВЛЕНИЕ 2:

Дополнительный ответ см. В этом Q&A: отправка файлов cookie в приложении Angular и Access-Control-Allow-Origin в режиме разработки

nonono, я не хочу менять свое приложение. Мое приложение отлично работает в производственной среде, на самом деле, ваше предложение сломает его. Мне нужно отправить файлы cookie на ng serve. Кроме того, если я использую одну версию в производстве, а другую в разработке, мне нужно менять ее каждый раз, когда нажимаю обновление, а затем меняю его обратно, в результате чего у меня остается 2 версии. ужасная, ужасная практика

potato 18.10.2018 21:39

Ну, я не знаю, как вы ожидаете, что Angular будет отправлять файлы cookie, если вы не сообщите об этом. Насколько мне известно, в ng serve нет возможности заставить класс HttpClient использовать параметр withCredentials.

Brandon 18.10.2018 21:44

Вы всегда можете добавить условие к Http Interceptor, чтобы передавать файлы cookie только в том случае, если ваша среда является локальной.

Brandon 18.10.2018 21:46

Ого .. сумасшедший, у людей есть 2 версии для каждого проекта, требующего авторизации. Я почти уверен, что забуду отключить локальную среду хотя бы в одном из следующих 100 обновлений :)

potato 18.10.2018 21:48

Как вы думаете, почему у вас будет две версии вашего приложения, если вы просто проверяете переменную среды, предоставленную самим Angular? Вы будете запускать и развертывать один и тот же код локально и в производственной среде. Единственное, что будет отличаться, - это значение в вашем environment.ts / environment.prod.ts. Я не уверен, что это «ужасная, ужасная практика».

Brandon 18.10.2018 21:51

Спасибо за помощь. Пришлось читать про environment.ts и как он используется. Хотя я бы предпочел отправлять cookie на ng serve, использование evnironment.ts также выполняет свою работу. Опубликуйте это как ответ, если вам нужны баллы

potato 19.10.2018 13:47

Пожалуйста. Очки мне конечно не нужны, но для остальных добавил ответ.

Brandon 19.10.2018 16:27
Тестирование функциональных 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
8
1 175
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Передавать файлы cookie по каждому запросу довольно просто. ng serve не позволяет включить эту функцию, но вы можете передавать файлы cookie условно в зависимости от настроек вашей среды:

Вот образец перехватчика:

import { Injectable } from '@angular/core';
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { environment } from '@app/environments/environment.ts'

@Injectable()
export class CustomHttpInterceptor implements HttpInterceptor {

  intercept (httpRequest: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const clonedRequest = httpRequest.clone({
      withCredentials: environment.sendCookies,
    });

    return next.handle(clonedRequest);
  }

}

В вашем environment.ts вы можете установить sendCookies на true, а в environment.prod.ts установить его на false. Таким образом, у вас по-прежнему будет только одна версия вашего приложения, но с другим поведением там, где вам это нужно.

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