Я пытаюсь получить простой пользовательский логин для работы с использованием fetch POST в приложении ReactJS против конечной точки Drupal 8.8 Rest, чтобы я мог POST с CSRF или другими методами. Если я выдаю следующее с запросом CURL:
curl --header "Content-type: application/json" --request POST --data '{"name":"myname", "pass":"mypassword123"}' http://example.com/user/login?_format=json
... Я получаю ...
{"current_user":{"uid":"1","roles":["authenticated","administrator"],"name":"myname"},"csrf_token":"xxxxx","logout_token":"xxxx"}
В моем приложении, с другой стороны, я использую запрос на выборку .. .
_handleSubmit = async event => {
event.preventDefault();
const response = await fetch(
"http://example.com/user/login?_format_json",
{
method: "POST",
headers: {
"Content-type": "application/json"
},
body: {
data: {
user: "myname",
pass: "mypassword123"
}
}
}
);
Я получаю
Drupal 8 POST / user / login? _Format = json 500 (500 Служба недоступна (с сообщением))
Имею также попытался удалить ключ "body" следующим образом:
_handleSubmit = async event => {
event.preventDefault();
const response = await fetch(
"http://example.com/entity/user?_format_json",
{
method: "POST",
headers: {
"Content-type": "application/json"
},
data: {
user: "myname",
pass: "mypassword123"
}
}
);
... также у меня есть модуль REST UI, но для / user / login не определена конечная точка. есть конечная точка / user / edit. Правильно ли я предполагаю, что / user / login? _Format = json POST настроен по умолчанию?
Любая помощь в этом была бы высоко оценена.
Я повторил запрос ajax и увидел, что это проблема, связанная с "cors". Тем не менее, я не понимаю, почему это проблема. Я включил мою конфигурацию "cors" из файла services.yml на моем сайте. По моему опыту, это должно включить запросы POST из браузера. Если только я что-то упустил ...
cors.config:
enabled: true
allowedHeaders:
[
"x-csrf-token",
"authorization",
"content-type",
"accept",
"origin",
"x-requested-with",
"access-control-allow-origin",
"x-allowed-header",
"*",
]
allowedMethods: ["*"]
allowedOrigins: ["*"]
exposedHeaders: false
maxAge: false
supportsCredentials: true
Также вот последний запрос на выборку, который я использую. Он ничем не отличается от другого.
_handleSubmit = async event => {
event.preventDefault();
const response = await fetch(
"http://example.com/user/login?_format=json",
{
method: "POST",
headers: {
"Content-type": "application/json"
},
data: JSON.stringify({
user: "myname",
pass: "mypassword"
})
}
);
console.log(response);
};