Hi,
I’m working with the Uniform Plugin of @mzur , I have some trouble with the CSRF token being not matched.
I’ve already read the forum issue here Uniform - CSRF rejection but it didnt quiet helped me any further.
I’ve been checking the network tab checking if there isn’t any double Page load:
Here’s the code of the form in config.php
:
c::set('routes', array(
array(
'pattern' => '/',
'method' => 'POST',
'action' => function () {
$form = new \Uniform\Form([
'name' => [
'rules' => ['required'],
'message' => 'Name is required',
],
'email' => [
'rules' => ['required', 'email'],
'message' => 'Email is required',
],
'country' => [],
'filefield' => [
'rules' => ['required'],
'message' => 'Please choose a file',
],
'userwebsite' => [],
'postertitle' => [
'rules' => ['required'],
'message' => 'Title is required',
],
'posterclient' => [],
'aboutposter' => [
'rules' => ['required'],
'message' => 'Some information about your submission is required',
],
],'submission-form');
// Perform validation and execute guards.
$form->withoutFlashing()
->withoutRedirect()
->guard();
if (!$form->success()) {
// Return validation errors.
return response::json($form->errors(), 400);
}
// If validation and guards passed, execute the action.
$form->emailAction([
'to' => 'info@thomasverleye.be',
'from' => 'opencall@apf.design',
'subject' => 'New poster submission from {email}',
]);
/*
$form->uploadAction(['fields' => [
'filefield' => [
'target' => kirby()->roots()->content(),
'prefix' => false,
],
]]);
*/
if (!$form->success()) {
// This should not happen and is our fault.
return response::json($form->errors(), 500);
}
// Return code 200 on success.
}
)
));
What happens if you put that code into a controller instead of a route? i dont think thats right - according to the docs, it should be in a controller for the page that the form is on.
Not if you use Ajax, AJAX - Kirby Uniform
zvaehn
October 28, 2018, 4:17pm
4
Can you make sure that kirby is not called twice for any reason?
That would destroy your active CSRF-Token.
You could add an error_log()
in your site.php
.
I can remember that i had the same issue a year ago or so.
kr.
zvaehn:
error_log()
How does one add an error_log() in your site.php
?
I’ve been searching for Kirby being called twice but no dice
I’ve also noticed a 302 redirect on the Post Call.
zvaehn
October 28, 2018, 5:22pm
6
Have a look at: https://getkirby.com/docs/developer-guide/configuration/folders#site-php
Just create the site.php
in the webroot beside the kirby and panel folder and it will get called automatically.
Make sure to create a kirby object:
$kirby = kirby();
error_log("kirby has been called.");
Check your error_log and see how many times the output gets written into the error-log-file for one page call.
Update: It’s probably something on the front-end, I’ll leave a comment soon if I’ve fixed it
So I’ve fixed the problem with the csrf token (my form data was serialized instead of using FormData).
But now the php response is stating that the file field im sending is missing.
Anyone here has experience in sending a file upload through AJAX with Kirby Uniform plugin?
texnixe
October 29, 2018, 7:42am
11
Could you post your form, please?
<form action="<?php echo $page->url()?>/" method="POST" enctype="multipart/form-data" class="c-form o-form o-form--submission js-form--submission" id="submission-form">
<div id="o-form__field-group">
<div class="o-form__response o-form__response--error" id="submission-form--error"></div>
<div class="o-form__response o-form__response--success" id="submission-form--success" ></div>
</div>
<fieldset class="o-form__fieldset">
<legend class="o-form__legend">
<h3 class="t-sans t-title--small">Personal information</h3>
</legend>
<div class="o-form__group">
<label for="name" class="o-form__label">Name*</label>
<input name="name" type="text" class="o-form__field o-form__text" placeholder="Your Name" required />
</div>
<div class="o-form__group">
<label for="email" class="o-form__label">E-mail address*</label>
<input name="email" type="email" class="o-form__field o-form__email" placeholder="Your e-mail address" required />
</div>
<div class="o-row--inside">
<div class="o-form__group o-col-6 o-col-md-12">
<label for="country" class="o-form__label">Country*</label>
<select name="country" class="o-form__field o-form__select" >
<option value="AFG">Afghanistan</option>
<option value="ALA">Åland Islands</option>
<option value="ALB">Albania</option>
<option value="DZA">Algeria</option>
<option value="ASM">American Samoa</option>
<option value="AND">Andorra</option>
<option value="AGO">Angola</option>
<option value="AIA">Anguilla</option>
<option value="ATA">Antarctica</option>
<option value="ATG">Antigua and Barbuda</option>
<option value="ARG">Argentina</option>
<option value="ARM">Armenia</option>
<option value="ABW">Aruba</option>
<option value="AUS">Australia</option>
<option value="AUT">Austria</option>
<option value="AZE">Azerbaijan</option>
<option value="BHS">Bahamas</option>
<option value="BHR">Bahrain</option>
<option value="BGD">Bangladesh</option>
<option value="BRB">Barbados</option>
<option value="BLR">Belarus</option>
<option value="BEL" selected="selected">Belgium</option>
<option value="BLZ">Belize</option>
<option value="BEN">Benin</option>
<option value="BMU">Bermuda</option>
<option value="BTN">Bhutan</option>
<option value="BOL">Bolivia, Plurinational State of</option>
<option value="BES">Bonaire, Sint Eustatius and Saba</option>
<option value="BIH">Bosnia and Herzegovina</option>
<option value="BWA">Botswana</option>
<option value="BVT">Bouvet Island</option>
<option value="BRA">Brazil</option>
<option value="IOT">British Indian Ocean Territory</option>
<option value="BRN">Brunei Darussalam</option>
<option value="BGR">Bulgaria</option>
<option value="BFA">Burkina Faso</option>
<option value="BDI">Burundi</option>
<option value="KHM">Cambodia</option>
<option value="CMR">Cameroon</option>
<option value="CAN">Canada</option>
<option value="CPV">Cape Verde</option>
<option value="CYM">Cayman Islands</option>
<option value="CAF">Central African Republic</option>
<option value="TCD">Chad</option>
<option value="CHL">Chile</option>
<option value="CHN">China</option>
<option value="CXR">Christmas Island</option>
<option value="CCK">Cocos (Keeling) Islands</option>
<option value="COL">Colombia</option>
<option value="COM">Comoros</option>
<option value="COG">Congo</option>
<option value="COD">Congo, the Democratic Republic of the</option>
<option value="COK">Cook Islands</option>
<option value="CRI">Costa Rica</option>
<option value="CIV">Côte d'Ivoire</option>
<option value="HRV">Croatia</option>
<option value="CUB">Cuba</option>
<option value="CUW">Curaçao</option>
<option value="CYP">Cyprus</option>
<option value="CZE">Czech Republic</option>
<option value="DNK">Denmark</option>
<option value="DJI">Djibouti</option>
<option value="DMA">Dominica</option>
<option value="DOM">Dominican Republic</option>
<option value="ECU">Ecuador</option>
<option value="EGY">Egypt</option>
<option value="SLV">El Salvador</option>
<option value="GNQ">Equatorial Guinea</option>
<option value="ERI">Eritrea</option>
<option value="EST">Estonia</option>
<option value="ETH">Ethiopia</option>
<option value="FLK">Falkland Islands (Malvinas)</option>
<option value="FRO">Faroe Islands</option>
<option value="FJI">Fiji</option>
<option value="FIN">Finland</option>
<option value="FRA">France</option>
<option value="GUF">French Guiana</option>
<option value="PYF">French Polynesia</option>
<option value="ATF">French Southern Territories</option>
<option value="GAB">Gabon</option>
<option value="GMB">Gambia</option>
<option value="GEO">Georgia</option>
<option value="DEU">Germany</option>
<option value="GHA">Ghana</option>
<option value="GIB">Gibraltar</option>
<option value="GRC">Greece</option>
<option value="GRL">Greenland</option>
<option value="GRD">Grenada</option>
<option value="GLP">Guadeloupe</option>
<option value="GUM">Guam</option>
<option value="GTM">Guatemala</option>
<option value="GGY">Guernsey</option>
<option value="GIN">Guinea</option>
<option value="GNB">Guinea-Bissau</option>
<option value="GUY">Guyana</option>
<option value="HTI">Haiti</option>
<option value="HMD">Heard Island and McDonald Islands</option>
<option value="VAT">Holy See (Vatican City State)</option>
<option value="HND">Honduras</option>
<option value="HKG">Hong Kong</option>
<option value="HUN">Hungary</option>
<option value="ISL">Iceland</option>
<option value="IND">India</option>
<option value="IDN">Indonesia</option>
<option value="IRN">Iran, Islamic Republic of</option>
<option value="IRQ">Iraq</option>
<option value="IRL">Ireland</option>
<option value="IMN">Isle of Man</option>
<option value="ISR">Israel</option>
<option value="ITA">Italy</option>
<option value="JAM">Jamaica</option>
<option value="JPN">Japan</option>
<option value="JEY">Jersey</option>
<option value="JOR">Jordan</option>
<option value="KAZ">Kazakhstan</option>
<option value="KEN">Kenya</option>
<option value="KIR">Kiribati</option>
<option value="PRK">Korea, Democratic People's Republic of</option>
<option value="KOR">Korea, Republic of</option>
<option value="KWT">Kuwait</option>
<option value="KGZ">Kyrgyzstan</option>
<option value="LAO">Lao People's Democratic Republic</option>
<option value="LVA">Latvia</option>
<option value="LBN">Lebanon</option>
<option value="LSO">Lesotho</option>
<option value="LBR">Liberia</option>
<option value="LBY">Libya</option>
<option value="LIE">Liechtenstein</option>
<option value="LTU">Lithuania</option>
<option value="LUX">Luxembourg</option>
<option value="MAC">Macao</option>
<option value="MKD">Macedonia, the former Yugoslav Republic of</option>
<option value="MDG">Madagascar</option>
<option value="MWI">Malawi</option>
<option value="MYS">Malaysia</option>
<option value="MDV">Maldives</option>
<option value="MLI">Mali</option>
<option value="MLT">Malta</option>
<option value="MHL">Marshall Islands</option>
<option value="MTQ">Martinique</option>
<option value="MRT">Mauritania</option>
<option value="MUS">Mauritius</option>
<option value="MYT">Mayotte</option>
<option value="MEX">Mexico</option>
<option value="FSM">Micronesia, Federated States of</option>
<option value="MDA">Moldova, Republic of</option>
<option value="MCO">Monaco</option>
<option value="MNG">Mongolia</option>
<option value="MNE">Montenegro</option>
<option value="MSR">Montserrat</option>
<option value="MAR">Morocco</option>
<option value="MOZ">Mozambique</option>
<option value="MMR">Myanmar</option>
<option value="NAM">Namibia</option>
<option value="NRU">Nauru</option>
<option value="NPL">Nepal</option>
<option value="NLD">Netherlands</option>
<option value="NCL">New Caledonia</option>
<option value="NZL">New Zealand</option>
<option value="NIC">Nicaragua</option>
<option value="NER">Niger</option>
<option value="NGA">Nigeria</option>
<option value="NIU">Niue</option>
<option value="NFK">Norfolk Island</option>
<option value="MNP">Northern Mariana Islands</option>
<option value="NOR">Norway</option>
<option value="OMN">Oman</option>
<option value="PAK">Pakistan</option>
<option value="PLW">Palau</option>
<option value="PSE">Palestinian Territory, Occupied</option>
<option value="PAN">Panama</option>
<option value="PNG">Papua New Guinea</option>
<option value="PRY">Paraguay</option>
<option value="PER">Peru</option>
<option value="PHL">Philippines</option>
<option value="PCN">Pitcairn</option>
<option value="POL">Poland</option>
<option value="PRT">Portugal</option>
<option value="PRI">Puerto Rico</option>
<option value="QAT">Qatar</option>
<option value="REU">Réunion</option>
<option value="ROU">Romania</option>
<option value="RUS">Russian Federation</option>
<option value="RWA">Rwanda</option>
<option value="BLM">Saint Barthélemy</option>
<option value="SHN">Saint Helena, Ascension and Tristan da Cunha</option>
<option value="KNA">Saint Kitts and Nevis</option>
<option value="LCA">Saint Lucia</option>
<option value="MAF">Saint Martin (French part)</option>
<option value="SPM">Saint Pierre and Miquelon</option>
<option value="VCT">Saint Vincent and the Grenadines</option>
<option value="WSM">Samoa</option>
<option value="SMR">San Marino</option>
<option value="STP">Sao Tome and Principe</option>
<option value="SAU">Saudi Arabia</option>
<option value="SEN">Senegal</option>
<option value="SRB">Serbia</option>
<option value="SYC">Seychelles</option>
<option value="SLE">Sierra Leone</option>
<option value="SGP">Singapore</option>
<option value="SXM">Sint Maarten (Dutch part)</option>
<option value="SVK">Slovakia</option>
<option value="SVN">Slovenia</option>
<option value="SLB">Solomon Islands</option>
<option value="SOM">Somalia</option>
<option value="ZAF">South Africa</option>
<option value="SGS">South Georgia and the South Sandwich Islands</option>
<option value="SSD">South Sudan</option>
<option value="ESP">Spain</option>
<option value="LKA">Sri Lanka</option>
<option value="SDN">Sudan</option>
<option value="SUR">Suriname</option>
<option value="SJM">Svalbard and Jan Mayen</option>
<option value="SWZ">Swaziland</option>
<option value="SWE">Sweden</option>
<option value="CHE">Switzerland</option>
<option value="SYR">Syrian Arab Republic</option>
<option value="TWN">Taiwan, Province of China</option>
<option value="TJK">Tajikistan</option>
<option value="TZA">Tanzania, United Republic of</option>
<option value="THA">Thailand</option>
<option value="TLS">Timor-Leste</option>
<option value="TGO">Togo</option>
<option value="TKL">Tokelau</option>
<option value="TON">Tonga</option>
<option value="TTO">Trinidad and Tobago</option>
<option value="TUN">Tunisia</option>
<option value="TUR">Turkey</option>
<option value="TKM">Turkmenistan</option>
<option value="TCA">Turks and Caicos Islands</option>
<option value="TUV">Tuvalu</option>
<option value="UGA">Uganda</option>
<option value="UKR">Ukraine</option>
<option value="ARE">United Arab Emirates</option>
<option value="GBR">United Kingdom</option>
<option value="USA">United States</option>
<option value="UMI">United States Minor Outlying Islands</option>
<option value="URY">Uruguay</option>
<option value="UZB">Uzbekistan</option>
<option value="VUT">Vanuatu</option>
<option value="VEN">Venezuela, Bolivarian Republic of</option>
<option value="VNM">Viet Nam</option>
<option value="VGB">Virgin Islands, British</option>
<option value="VIR">Virgin Islands, U.S.</option>
<option value="WLF">Wallis and Futuna</option>
<option value="ESH">Western Sahara</option>
<option value="YEM">Yemen</option>
<option value="ZMB">Zambia</option>
<option value="ZWE">Zimbabwe</option>
</select>
</div>
<div class="o-form__group o-col-6 o-col-md-12">
<label for="userwebsite" class="o-form__label">Website</label>
<input name="userwebsite" type="text" class="o-form__field o-form__text" placeholder="http://" />
</div>
</div>
</fieldset>
<fieldset class="o-form__fieldset">
<legend class="o-form__legend">
<h3 class="t-sans t-title--small">Poster submission</h3>
</legend>
<div class="o-form__group o-form__file-area">
<label for="filefield" class="o-form__label">PDF upload</label>
<input type="file" id="filefield" name="filefield" accept="application/pdf" required/>
<div class="file-dummy">
<div class="success">Great, your poster is selected.</div>
<div class="default">+ PDF</div>
</div>
</div>
<div class="o-row--inside">
<div class="o-form__group o-col-6 o-col-md-12">
<label for="postertitle" class="o-form__label">Poster title</label>
<input name="postertitle" type="text" class="o-form__field o-form__text" placeholder="Poster title" />
</div>
<div class="o-form__group o-col-6 o-col-md-12">
<label for="posterclient" class="o-form__label">Client</label>
<input name="posterclient" type="text" class="o-form__field o-form__text" placeholder="Client" />
</div>
</div>
<div class="o-form__group">
<label for="aboutposter" class="o-form__label">About your poster</label>
<textarea name="aboutposter" class="o-form__field o-form__message" rows="3" required placeholder="What’s the link with Show Your Colours?"></textarea>
</div>
</fieldset>
<fieldset class="o-form__fieldset">
<div class="o-form__group">
<div class="o-form__checkbox-container">
<label class="o-form__label"></label>
<input type="checkbox" class="o-form__checkbox" name="terms" aria-checked="false" />
<span class= "o-form__checkbox-label">I agree to the APF Terms and Conditions</span>
</div>
<?php echo csrf_field() ?>
<h1><?php echo s::get('csrf'); ?></h1>
<?php echo honeypot_field() ?>
<div class="o-form__submit-container">
<span class="text">Submit poster </span><span class="arrow">→</span>
<input type="submit" class="o-form__button o-form__submit" value="Submit poster" />
</div>
</div>
</fieldset>
</form>