Я написал бэкэнд 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 версии. ужасная, ужасная практика
Ну, я не знаю, как вы ожидаете, что Angular будет отправлять файлы cookie, если вы не сообщите об этом. Насколько мне известно, в ng serve нет возможности заставить класс HttpClient использовать параметр withCredentials.
Вы всегда можете добавить условие к Http Interceptor, чтобы передавать файлы cookie только в том случае, если ваша среда является локальной.
Ого .. сумасшедший, у людей есть 2 версии для каждого проекта, требующего авторизации. Я почти уверен, что забуду отключить локальную среду хотя бы в одном из следующих 100 обновлений :)
Как вы думаете, почему у вас будет две версии вашего приложения, если вы просто проверяете переменную среды, предоставленную самим Angular? Вы будете запускать и развертывать один и тот же код локально и в производственной среде. Единственное, что будет отличаться, - это значение в вашем environment.ts / environment.prod.ts. Я не уверен, что это «ужасная, ужасная практика».
Спасибо за помощь. Пришлось читать про environment.ts и как он используется. Хотя я бы предпочел отправлять cookie на ng serve, использование evnironment.ts также выполняет свою работу. Опубликуйте это как ответ, если вам нужны баллы
Пожалуйста. Очки мне конечно не нужны, но для остальных добавил ответ.





Передавать файлы 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. Таким образом, у вас по-прежнему будет только одна версия вашего приложения, но с другим поведением там, где вам это нужно.
Возможный дубликат Как отправить «Cookie» в заголовок запроса для всех запросов в Angular2?