• Как правильно сделать запрос на сервер с csurf?

    @bahurtsev
    У вас вот тут интересная строка:
    let token = await fetch("http://site/admin/", {method:'get'}).then(data=>data.json())

    Одновременно и await и .then();

    Вот как я сделал:

    Клиент:
    function get_csurf_token(){
    
    	return new Promise(async (resolve, reject) => {
    		let response = await fetch('/get_csurf_token', {
    			method:'get',
    			headers: {
    				'Accept': 'application/json',
    			},
    		});
    
    		if(response.status == 200){	
    			let obj = await response.json();
    			console.log(obj)
    			resolve(obj.token);
    		}
    	});
    
    }
    
    form_add.addEventListener('submit', async function(event){
    
    	event.preventDefault();
    
    	let csurf_token = await get_csurf_token();
    
    	let response = await fetch(form_add.getAttribute('action'), {
    		method: form_add.getAttribute('method'),
    		headers: {
    			'Content-type': 'application/json',
    			'Accept': 'application/json',
    			'X-Csrf-Token': csurf_token,
    		},
    		body: JSON.stringify({
    			first_name: form_add.first_name.value,
    			last_name: form_add.last_name.value
    		})
    	});
    	console.log(response)
    	if(response.status == 200){
    
    		let user = await response.json();
    		output.innerHTML = 'В базу данных добавлен новый пользователь: <b>' + user.first_name + ' ' + user.last_name + '</b><br>';
    
    	}
    	else{
    		output.innerHTML = 'Произошла ошибка!<br>' + response.status + ' ' + response.statusText;
    	}
    
    });


    Сервер:

    app.use(csurf());
    
    app.get('/get_csurf_token', async function(req, res){
    	
    	let token = req.csrfToken();
    	console.log(token);	// Получим строку вида: xmRBPXdh-s8TAuC5xwUt80ocW6hiim9Ow690
    	res.send({ token });
    
    });
    Ответ написан
    Комментировать