У меня есть небольшой частный проект, и теперь я зависаю с файлами cookie.
Прежде всего я хочу показать вам некоторый код:
UserServiceControler.cs
[HttpPost("IsAuthenticated")]
public IActionResult IsAuthenticated([FromBody] IsAuthenticatedRequest request) {
var hash = _userService.IsAuthenticated(HttpContext, request);
switch (hash) {
case "200":
case "401":
return new StatusCodeResult(Convert.ToInt32(hash));
default:
if (HttpContext.Request.Cookies.Contains("TEST")) {
HttpContext.Response.Cookies.Delete("TEST");
}
HttpContext.Response.Cookies.Append("Test", hash, new CookieOptions() {
HttpOnly = true,
Secure = true,
IsEssential = true,
Domain = "localhost",
Expires = new DateTimeOffset(DateTime.Now).AddMinutes(20.0)
});
return new StatusCodeResult(200);
}
}
Proxy.conf.json
{
"/api/*": {
"target": "https://localhost:5001",
"secure": false,
"topLevel": "debug",
"changeOrigin": true
},
"/login.html": {
"target": "http://localhost:4200/assets/pages",
"secure": false
},
"/": {
"target": "http://localhost:4200",
"secure": false
}
}
login.html просто функционирует
var paramString = "{username: \"test\", password: \"test\"}";
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
window.location.href = "/";
} else if (this.status == 401) {
alert("1");
}
};
xhttp.open("POST", "/api/UserService/IsAuthenticated", true);
xhttp.withCredentials = true;
xhttp.setRequestHeader("Content-type", "application/json-patch+json");
xhttp.setRequestHeader("Access-Control-Allow-Origin", "*");
xhttp.setRequestHeader("Access-Control-Allow-Credentials", "true");
xhttp.send(paramString);
Когда я проверяю свой IsAuthenticated через Swagger, я получаю cookie со всем, что хочу.Но когда я хочу использовать это в своем приложении Angular, я не получаю свой cookie.
Как это работает: Обычно, когда я звоню /api/UserService/IsAuthenticated
, в swagger и даю ему имя пользователя и парольон устанавливает cookie в моем браузере.Это делает меня счастливым, потому что это показывает мне, что мой API не проблема.Теперь речь идет об Angular.Я запускаю свое приложение через npm start
, и в этом ng serve --proxy-config proxy.conf.json
нет ничего особенного.В моем index.html тот же код, что и в login.html, только с тестовым именем пользователя и паролем, потому что он смотрит на cookie в моем API.Итак, я иду на localhost:4200
.Сначала он должен перенаправить меня на localhost:4200/login.html
, потому что я не вошел в систему. Это работает.Теперь в login.html я даю ему свое имя пользователя и пароль -> подождите несколько мс -> и я получаю StatusCode 200, и в консоли браузера в сети я вижу свой запрос с файлом cookie ответа.Но это не установлено в моем браузере.Это не хорошо.То, что я перенаправлен на localhost:4200
, потому что StatusCode равен 200, а на index.html
он снова проверяет, прошел ли я проверку подлинности, и меня перенаправляют обратно на localhost:4200/login.html
из-за отсутствия cookie.
Может кто-нибудь помочьмне пожалуйста с этой проблемой печенья?Или есть ли лучший способ, как я могу сделать этот сеанс пользователя?