Имеется метод:
//[Authorize]
[ValidateAntiForgeryToken]
[ApiExplorerSettings(IgnoreApi = false)]
[AllowAnonymous]
[HttpPost("login")]
public async Task<IActionResult> Login([FromBody] LoginViewModel model)
{
//
}
На уровне Startup прописан такой сервис:
services.AddAntiforgery(o =>
{
//o.Cookie.Name = "X-Xsrf-Token";
o.HeaderName = "X-XSRF-TOKEN";
});
На уровне Startup прописан такой middleware:
app.Use(next => context =>
{
string path = context.Request.Path.Value;
string[] urlAreas = { "/api", "/swagger", "articles" };
if (
string.Equals(path, "/", StringComparison.OrdinalIgnoreCase) ||
string.Equals(path, "/index.html", StringComparison.OrdinalIgnoreCase) ||
urlAreas.Any(url=>path.StartsWith(url))
)
{
var tokens = antiforgery.GetAndStoreTokens(context);
context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken,
new CookieOptions() {
HttpOnly = false ,
Secure=false,
IsEssential=true,
SameSite=SameSiteMode.Strict
});
}
return next(context);
});
В самом приложении React прописан такой метод:
let csrftoken = this.getCookie("XSRF-TOKEN");
axios
.post(url, data, {
headers: {
'X-XSRF-TOKEN': csrftoken
}
})
getCookie(name) {
let cookieValue = null;
if (document.cookie && document.cookie !== '') {
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i].trim();
Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
При отправке запроса не пропускает на сервер, пишет 400 (Bad Request). В чем может быть ошибка?