luchob/softuni-feb2023

Проблем с comment service

Closed this issue · 3 comments

Здравей Лъчо!

За пореден път идвам да черпя от твоите знания. Използвах логиката от Pathfinder на Крис от workshopa, но когато пробвам да създам коментар ми връща 403 status forbidden, опитах се да намеря проблема но не успях so far.

Ако имаш време да го разгледаш и да ми дадещ съвет ще съм благодарен.

https://github.com/Alexanski13/My-Gym-Shop/tree/main/my-gym-shop/src/main

luchob commented

Здравей!

Не съм свалил проекта, само го гледах онлайн и 99% съм сигурен, че проблема е че не можеш да сложиш CSRF тоукъна в рикуеста. Тогава винаги ще ти дава проблем. Може да го докажеш като сложиш един disable csrf на конфигурацията. Трябва ти да ги сложиш някъде в HTML документа, от където да ги вземеш.

Пример -> https://github.com/luchob/pathfinder/blob/095cd597c805e662c2b0f1d9f589bf0d77ee5e6b/src/main/resources/templates/fragments/commons.html#L6

Поздрави,
Л.

Благодаря ти за отговора. Сложих csrf в head и се махна тази грешка, също сложих th action в comment секцията, но сега ми дава 415 error и това Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content-Type 'application/x-www-form-urlencoded' is not supported], което се разрових пишеше за request body в controllera, пробвах без него и с него плюс валид анотацията но същата грешка.

luchob commented

Здравей! Той примера не беше точно "C&P ready", просто насока. Ето какво си направил:

<meta name="_csrf" content="<long-token>">
<meta name="_csrf_header" content="X-CSRF-TOKEN">

Това означава, че трябва да сложиш HTTP хедър:

X-CSRF-TOKEN: <long-token>

Ти си написал:

const csrfHeaderName = document.getElementById('csrf').getAttribute('name')
const csrfHeaderValue = document.getElementById('csrf').getAttribute('value')

Eстествено, няма елемент с id csrf и скрипта ти гръмва, както се вижда от конзолата. Без да се гледа конзолата, няма да се виждат тези проблеми а там показва и реда на проблема:

Screenshot 2023-04-01 at 16 01 04

Като гръмва съответно JS-a спира и не прихващаш събмита на формата. Тя се събмитва като нормална HTML форма с контент тип application/x-www-form-urlencoded. Докато контролера ти приема application/json. Това означава и грешка 415.

Трябва да си кристиш таговете с някакво подходящо име и да вземеш двете стойности. Може да следиш и експериментираш как в дев конзолата, става въпрос за просто JS-че.

Поздрави,
Л.