Я полагаю, что вы используете защиту csrf и добавили глобальный обработчик ошибок. https://owasp.org/www-community/attacks/csrf
Приложение считает, что вы вредоносны: D
Идея состоит в том, что если вы войдете на сайт, вы получите повар ie и так далее. Если кто-то обманывает вас, чтобы сделать запрос с какого-либо другого сайта (например, поддельное всплывающее окно для уведомлений или объявление, где вы просто нажимаете X, чтобы закрыть его).
Обычно они могут просто перенаправить вас, но вы все равно полностью авторизованы так как у вас есть сессионный повар ie, поэтому ... если по ошибке вы выполняете какое-то разрушительное действие на GET, они могут вызывать это столько раз, сколько захотят.
Чтобы предотвратить это, все формы имеют токен csrf при визуализации. Поэтому, когда вы отправляете форму, токен также отправляется и проверяется на сервере.
Когда вы запускаете команду curl, вы не передаете токен csrf.
Когда вы go получаете http://localhost: 3000 / signup / sign_up и проверьте форму, с которой вы увидите токен вверху, например
<form class="new_user" id="new_user" action="/signup" accept-charset="UTF-8" method="post">
<input type="hidden" name="authenticity_token" value="ZrhdZbibdKzygUem67VxNrTmT5jOU/GTxgqYz3+rtErAdEKBKUrk2zMD0vu3qTh1jmlLVhlnfbYyH7/FZpKuqA==">
....
</form>
Токен csrf также находится во главе html.
Итак ... если вы хотите вызвать контроллер с помощью curl, вы должны передать этот токен:
$ curl --cookie-jar my-cookie http://localhost:3000/signup/sign_up | grep csrf-token
<meta name="csrf-token" content="iVjcWccB8tO+ywG+CM9RD2NJQ4CkPjeyoYb9F6U0XUajabq8ZSHRoeoT1hAgxwKsqKDYP3gf4CHR6GjODLbt3w==" />
$ curl --cookie my-cookie -H "Content-type: application/json" --data-binary '{"authenticity_token": "iVjcWccB8tO+ywG+CM9RD2NJQ4CkPjeyoYb9F6U0XUajabq8ZSHRoeoT1hAgxwKsqKDYP3gf4CHR6GjODLbt3w==","user":{"email":"test1@test.com","password":"test12345","password_confirmation":"test12345"}}' localhost:3000/signup
<html><body>You are being <a href="http://localhost:3000/">redirected</a>.</body></html>* Closing connection 0
В общем случае, если вы действительно начинаете чисто, пользователь создает:
rails generate devise:install
rails generate devise User
# and you add the top part of the routing before the custom controllers
Еще один удивительный вариант - это то, что вы, возможно, отключили защиту csrf и каким-то образом попадаете на страницу входа: D / вы перепутали пользовательский RegistrationsController / SessionsController
На вкладке, где вы запускаете приложение, вы можете увидеть журнал, напечатанный на stdout, и вы увидите, что происходит и какая конечная точка отвечает.