.Net Core 2.1 и Angular 6 Cookies - PullRequest
       30

.Net Core 2.1 и Angular 6 Cookies

0 голосов
/ 22 ноября 2018

У меня есть небольшой частный проект, и теперь я зависаю с файлами 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.

Может кто-нибудь помочьмне пожалуйста с этой проблемой печенья?Или есть ли лучший способ, как я могу сделать этот сеанс пользователя?

...