Запрос POST, сделанный с токеном CSRF через многостраничную форму, дает ошибку 404 при производстве, но работает на localhost - PullRequest
1 голос
/ 02 августа 2020

Итак, проблема в том, что всякий раз, когда я делаю POST-запрос через многостраничную форму, он выдает ошибку 404 при производстве (aws ec2 с nginx в качестве обратного прокси), но отлично работает на localhost.

Моя форма выглядит так:

<form name="sell" method="POST" action="/item/sell/?_csrf=<%=locals.csrfToken%>" enctype="multipart/form-data" autocomplete="off" class="form" role="form">
    <div class="form-group">
        <input name="name" class="form-control" placeholder="Enter the item name" required type="text">
    </div>
    <div class="form-group">
        <textarea name="description" class="form-control" placeholder="Enter the item description" required type="text" rows="5" cols="30"></textarea>
    </div>
    <div class="form-group">
        <input type="number" name="price" min="1" class="form-control" placeholder="Enter the item price" required> 
    </div>          
    <div class="form-group">
        <button class="btn btn-danger btn-sm" type="submit">Submit</button>
    </div>
</form>

(и я не включил скрытый ввод csrf в форму).

Если я удалю enctype multipart из формы, удалите файл input, включите скрытый ввод для токена csrf и сделайте action="/item/sell", тогда он отлично работает даже на производстве. Это дает мне уверенность в том, что ошибка 404 связана с многокомпонентным кодированием.

Но я не могу понять, в чем причина этого, я пытался удалить nginx, но это тоже не похоже, работает.

Единственное, что я обнаружил относительно составных форм, это то, что вам нужно включить токен csrf в action attr формы вместо того, чтобы предоставлять его в качестве входных данных. Я не знаю, что еще можно сделать, чтобы это работало.

1 Ответ

0 голосов
/ 02 августа 2020

Express изначально не поддерживает multipart/formdata. вы можете использовать для этого такие модули, как multer. Возможно, вы использовали модуль body-parser при работе с телом json. Точно так же вам нужно будет использовать модуль для обработки многокомпонентных загрузок файлов.

Клиент / HTML

<form action="/profile" method="post" enctype="multipart/form-data">
  <input type="file" name="avatar" />
</form>

Сервер / Express

var express = require('express')
var multer  = require('multer')

// destination folder to store the uploads
var upload = multer({ dest: 'uploads/' })

var app = express()

app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file is the `avatar` file
  // req.body will hold the text fields, if there were any
})

Ссылка: Как обрабатывать составные закачки в express

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...