Express.js csrf с Ajax: 403 ответ [дубликат]

Новый MySQL 8.0.11 использует caching_sha2_password в качестве метода аутентификации по умолчанию. Я думаю, что phpMyAdmin не может понять этот метод аутентификации. Вам нужно создать пользователя с одним из старых методов проверки подлинности, например. CREATE USER xyz@localhost IDENTIFIED WITH mysql_native_password BY 'passw0rd'.

Подробнее здесь https://dev.mysql.com/doc/refman/8.0/en/create-user.html и здесь https: //dev.mysql.com/doc/refman/8.0/en/authentication-plugins.html

2
задан Tsar Bomba 21 November 2015 в 23:19
поделиться

4 ответа

Если вы хотите сохранить токен в cookie вместо сеанса, пусть csurf создаст для вас файл cookie, например

// Store the token in a cookie called '_csrf'
app.use(csrf({cookie: true));

// Make the token available to all views
app.use(function (req, res, next){
    res.locals._csrf = req.csrfToken();
    next();
});

. Затем вам нужно убедиться, что токен доступен, когда вы делая вызов с использованием AJAX либо через данные POST, либо как пользовательский заголовок запроса, такой как «xsrf-токен».

В минуту вы предоставляете токен форме, но не фактический запрос (отправленный с использованием AJAX).

Например, вы могли бы отобразить маркер в настройке AJAX:

$.ajaxSetup({
   headers: {"X-CSRF-Token": "{{csrfToken}}" }
}); 
5
ответ дан Ashley B 24 August 2018 в 05:21
поделиться

Еще один подход к моему личному проекту - отправить новый токен, когда я успешно отправлю свою форму:

Например, над моей формой (которая загружает файл) у меня есть follwing html:

<form id="upload_form" type="multipart/form-data" data-csrf="{{csrfToken}}" method="post" action="/data_assets">
  <input id="excell_upload" type="file" style="visible:hidden" name="data_assets"/>
</form>

И при изменении файла я запускаю такую ​​загрузку:

 $('#excell_upload').on('change',function(event){

      event.preventDefault();
      var formData = new FormData($("#upload_form")[0]);

      $.ajax({
        'type':$("#upload_form").attr('method'),
        'data': formData,
        'url': $("#upload_form").attr('action'),
        'processData': false,
        'contentType': false,
        'mimeType': 'multipart/form-data',
        'headers': {"X-CSRF-Token": $("#upload_form").attr('data-csrf') },
        'beforeSend': function (x) {
           if (x && x.overrideMimeType) {
               x.overrideMimeType("multipart/form-data");
          }
          $('#trigger_upload').addClass('disabled');
        },
        'success':function(data){
          $('#upload_form').attr('data-csrf',data.csrfToken)
        },
        'fail':function(){

        },
        'complete':function(){
          $('#trigger_upload').removeClass('disabled');
        }
      });
    });

Как вы заметили, я получаю новый токен csrf, чтобы иметь возможность повторно использовать мою форму для новых отправлений. Я регенерирую токен CSRF следующим образом:

app.post('/data_assets',function(req,res,next){
  res.json({'csrfToken':req.csrfToken()});
});
0
ответ дан Dimitrios Desyllas 24 August 2018 в 05:21
поделиться

, кроме добавления «X-CSRF-токена» в заголовок, на котором вы хотите полностью отключить файлы cookie!

var csrfProtection = csurf ({cookie: false});

автор упоминает его здесь https://github.com/expressjs / csurf / issues / 52

cookie и проверка сеанса не должны комбинироваться - хотя это немного вводит в заблуждение, так как он комбинировал проверку файлов cookie и сессии в своей документации: https: //github.com/expressjs/csurf#simple-express-example

0
ответ дан Michael P. 24 August 2018 в 05:21
поделиться

После нескольких часов поиска и поиска неисправностей я нашел сообщение, которое помогло ему ответить. Все, что мне нужно, это передать значение заголовка в сообщении ajax. Имеет смысл, я просто забыл об этом. Например:

<input type="hidden" id="_csrf" name="_csrf" value="<%= csrfToken %>" />

... а затем в jQuery:

    $.ajaxSetup({
        headers: {"X-CSRF-Token": $("#_csrf").val()}
    });
0
ответ дан Tsar Bomba 24 August 2018 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: