Canibre Posted August 9, 2016 Share Posted August 9, 2016 Bonjour, l'un de mes clients m'a fait remonter une erreur sur le front office. Il semblerait que les client ne peuvent plus modifier les champs de leur adresse lorsqu'ils se rendent sur mon compte>Mes adresses>mettre à jour Lorsqu’on change un champ du formulaire, quel qu'il soit (prénom, code postal, adresse) l'erreur suivante apparaît : Il y a 1 erreur : Jeton non valable J'ai bien vérifié dans le BO que les zones et pays sont bien paramétrés (dans Localisation>zone ou localisation>pays) screenshot en pj Pourriez-vous m'aider car c'est assez problématique? Je vous remercie et vous souhaite une excellente soirée ! Cordialement Philippe Link to comment Share on other sites More sharing options...
codetheweb Posted August 10, 2016 Share Posted August 10, 2016 Bonjour, Cela ressemble à une erreur dans le fichier adress.tpl, l'avez-vous modifié? Si oui tentez de le remplacer par un fichier original et tenez nous au courant Cordialement, Link to comment Share on other sites More sharing options...
Broceliande Posted August 10, 2016 Share Posted August 10, 2016 Bonjour, Cela ressemble à une erreur dans le fichier adress.tpl, l'avez-vous modifié? Si oui tentez de le remplacer par un fichier original et tenez nous au courant Cordialement, +1 , mais pas forcément uniquement adress.tpl. Il est probable que les tpls du thème ne gère pas correctement les token ou que des liens en dur aient été remplacés dans ces mêmes tpls pour des boutons submit par exemple. Si le thème est bidouillé il faudra le rectifier, ou simplement désactiver les tokens en front office dans Préférence -> générale : Améliore la sécurité du front-office OUINON Active ou désactive les jetons (tokens) en front-office afin d'améliorer la sécurité de PrestaShop Link to comment Share on other sites More sharing options...
codetheweb Posted August 10, 2016 Share Posted August 10, 2016 @Broceliande, en l'occurence j'en suis sur à 100% car je cite: mon compte>Mes adresses>mettre à jour Du coup ça ne laisse pas beaucoup de doute ^^ Link to comment Share on other sites More sharing options...
Broceliande Posted August 10, 2016 Share Posted August 10, 2016 @Broceliande, en l'occurence j'en suis sur à 100% car je cite: Du coup ça ne laisse pas beaucoup de doute ^^ Héhé oui pas faux, adress.tpl est à coup sûr touché , mais je me cite également du coup : mais pas forcément uniquement adress.tpl Je fais référence à l'utilisation des tokens et l'endroit ou il est validé , cad dans FrontController (eg sur une 1.6) : public function isTokenValid() { if (!Configuration::get('PS_TOKEN_ENABLE')) { return true; } return (strcasecmp(Tools::getToken(false), Tools::getValue('token')) == 0); } Autrement dit si le thème est bidouillé ou pas compatible avec la gestion des tokens il y a toutes les chances pour que AdressController ne soit pas le seul controller touché , et que d'autres tpls le soient . Dans les deux cas à défaut d'être en mesure de corriger le tpl , la désactivation des tokens en front office permettra à notre ami de se débloquer à moindre effort. 1 Link to comment Share on other sites More sharing options...
Canibre Posted August 10, 2016 Author Share Posted August 10, 2016 Bonsoir, merci à vous pour vos réponses et votre temps ! @Lefty_sarl : j'ai remplacé mon fichier address.tpl par l'original qui était avec mon thème (nommé biocosmétique), malheureusement cela ne fonctionne pas. Est-ce possible que ce fichier ne soit pas compatbile avec prestashop 1.6.1.5 ? Vous trouverez le fichier address.tpl ci dessous si besoin... @Broceliande : Merci pour l'astuce de désactiver les token. Cela fonctionne ! Par contre serait-il possible de me dire quelles sont les conséquences et en quoi les informations sont moins sécurisées? Dans l'idéal j'aimerais quand même garder une sécurité optimale sur mon site, et donc "réparer" ce fichier tpl... Bonne soirée à vous! {* ---------------------------------------- Template Prestashop BioCosmetic Copyright Prestacrea Author: Prestacrea Website: http://www.prestacrea.com ---------------------------------------- *} {***** Prestashop 1.4 - Retro compatibility code *****} {if !isset($ordered_adr_fields)} {if isset($address)} {counter start=0 skip=1 assign=address_key_number} {foreach from=$address key=address_key item=address_value} {$ordered_adr_fields.$address_key_number = $address_key} {counter} {/foreach} {else} {$ordered_adr_fields.0 = 'company'} {$ordered_adr_fields.1 = 'vat_number'} {$ordered_adr_fields.2 = 'firstname'} {$ordered_adr_fields.3 = 'lastname'} {$ordered_adr_fields.4 = 'address1'} {$ordered_adr_fields.5 = 'address2'} {$ordered_adr_fields.6 = 'postcode'} {$ordered_adr_fields.7 = 'city'} {$ordered_adr_fields.8 = 'country'} {$ordered_adr_fields.9 = 'state'} {/if} {/if} {***** /Prestashop 1.4 - Retro compatibility code *****} <script type="text/javascript"> // <![CDATA[ idSelectedCountry = {if isset($smarty.post.id_state)}{$smarty.post.id_state|intval}{else}{if isset($address->id_state)}{$address->id_state|intval}{else}false{/if}{/if}; countries = new Array(); countriesNeedIDNumber = new Array(); countriesNeedZipCode = new Array(); {foreach from=$countries item='country'} {if isset($country.states) && $country.contains_states} countries[{$country.id_country|intval}] = new Array(); {foreach from=$country.states item='state' name='states'} countries[{$country.id_country|intval}].push({ldelim}'id' : '{$state.id_state}', 'name' : '{$state.name|escape:'htmlall':'UTF-8'}'{rdelim}); {/foreach} {/if} {if $country.need_identification_number} countriesNeedIDNumber.push({$country.id_country|intval}); {/if} {if isset($country.need_zip_code)} countriesNeedZipCode[{$country.id_country|intval}] = {$country.need_zip_code}; {/if} {/foreach} $(function(){ldelim} $('.id_state option[value={if isset($smarty.post.id_state)}{$smarty.post.id_state}{else}{if isset($address->id_state)}{$address->id_state|escape:'htmlall':'UTF-8'}{/if}{/if}]').attr('selected', 'selected'); {rdelim}); {if $vat_management} {literal} $(document).ready(function() { $('#company').blur(function(){ vat_number(); }); vat_number(); function vat_number() { if ($('#company').val() != '') $('#vat_number').show(); else $('#vat_number').hide(); } }); {/literal} {/if} //]]> </script> {capture name=path}{l s='Your addresses'}{/capture} {include file="$tpl_dir./breadcrumb.tpl"} <h1>{l s='Your addresses'}</h1> {include file="$tpl_dir./errors.tpl"} <form action="{$link->getPageLink('address.php', true)}" method="post" class="std" id="add_adress"> <fieldset> <h3> {if isset($id_address) && (isset($smarty.post.alias) || isset($address->alias))} {l s='Modify address'} {else} {l s='Add a new address'} {/if} </h3> <p class="required text dni"> <label for="dni">{l s='Identification number'}<sup>*</sup></label> <span><input type="text" class="text validate" name="dni" id="dni" value="{if isset($smarty.post.dni)}{$smarty.post.dni}{else}{if isset($address->dni)}{$address->dni}{/if}{/if}" data-validate="isDniLite" /></span> <span class="form_info">{l s='DNI / NIF / NIE'}</span> </p> {assign var="stateExist" value="false"} {foreach from=$ordered_adr_fields item=field_name} {if $field_name eq 'company'} <p class="text"> <input type="hidden" name="token" value="{$token}" /> <label for="company">{l s='Company'}</label> <span><input type="text" class="text validate" id="company" name="company" value="{if isset($smarty.post.company)}{$smarty.post.company}{else}{if isset($address->company)}{$address->company}{/if}{/if}" data-validate="isGenericName" /></span> </p> {/if} {if $field_name eq 'vat_number'} {if $vat_display == 2} <div id="vat_area"> {elseif $vat_display == 1} <div id="vat_area" style="display:none"> {else} <div style="display:none"> {/if} <div id="vat_number"> <p class="text"> <label for="vat_number">{l s='VAT number'}</label> <span><input type="text" class="text validate" name="vat_number" value="{if isset($smarty.post.vat_number)}{$smarty.post.vat_number}{else}{if isset($address->vat_number)}{$address->vat_number}{/if}{/if}" data-validate="isGenericName" /></span> </p> </div> </div> {/if} {if $field_name eq 'firstname'} <p class="required text float"> <label for="firstname">{l s='First name'}<sup>*</sup></label> <span><input type="text" name="firstname" id="firstname" value="{if isset($smarty.post.firstname)}{$smarty.post.firstname}{else}{if isset($address->firstname)}{$address->firstname}{/if}{/if}" class="is_required validate" data-validate="isName" /></span> </p> {/if} {if $field_name eq 'lastname'} <p class="required text"> <label for="lastname">{l s='Last name'}<sup>*</sup></label> <span><input type="text" id="lastname" name="lastname" value="{if isset($smarty.post.lastname)}{$smarty.post.lastname}{else}{if isset($address->lastname)}{$address->lastname}{/if}{/if}" class="is_required validate" data-validate="isName" /></span> </p> {/if} {if $field_name eq 'address1'} <p class="required text float"> <label for="address1">{l s='Address'}<sup>*</sup></label> <span><input type="text" id="address1" name="address1" value="{if isset($smarty.post.address1)}{$smarty.post.address1}{else}{if isset($address->address1)}{$address->address1}{/if}{/if}" class="is_required validate" data-validate="isAddress" /></span> </p> {/if} {if $field_name eq 'address2'} <p class="required text"> <label for="address2">{l s='Address (Line 2)'}</label> <span><input type="text" id="address2" name="address2" value="{if isset($smarty.post.address2)}{$smarty.post.address2}{else}{if isset($address->address2)}{$address->address2}{/if}{/if}" class="validate" data-validate="isAddress" /></span> </p> {/if} {if $field_name eq 'postcode'} <p class="required postcode text float"> <label for="postcode">{l s='Zip / Postal Code'}<sup>*</sup></label> <span><input type="text" id="postcode" name="postcode" value="{if isset($smarty.post.postcode)}{$smarty.post.postcode}{else}{if isset($address->postcode)}{$address->postcode}{/if}{/if}" onkeyup="$('#postcode').val($('#postcode').val().toUpperCase());" class="is_required validate" data-validate="isPostCode" /></span> </p> {/if} {if $field_name eq 'city'} <p class="required text"> <label for="city">{l s='City'}<sup>*</sup></label> <span><input type="text" name="city" id="city" value="{if isset($smarty.post.city)}{$smarty.post.city}{else}{if isset($address->city)}{$address->city}{/if}{/if}" maxlength="64" class="is_required validate" data-validate="isCityName" /></span> </p> {* if customer hasn't update his layout address, country has to be verified but it's deprecated *} {/if} {if $field_name eq 'Country:name' || $field_name eq 'country'} <p class="required select"> <label for="id_country">{l s='Country'}<sup>*</sup></label> <select id="id_country" name="id_country">{$countries_list}</select> </p> {if isset($vatnumber_ajax_call) && $vatnumber_ajax_call} <script type="text/javascript"> var ajaxurl = '{$ajaxurl}'; {literal} $(document).ready(function(){ $('#id_country').change(function() { $.ajax({ type: "GET", url: ajaxurl+"vatnumber/ajax.php?id_country="+$('#id_country').val(), success: function(isApplicable){ if(isApplicable == "1") { $('#vat_area').show(); $('#vat_number').show(); } else { $('#vat_area').hide(); } } }); }); }); {/literal} </script> {/if} {/if} {if $field_name eq 'State:name'} {assign var="stateExist" value="true"} <p class="required id_state select"> <label for="id_state">{l s='State'}<sup>*</sup></label> <select name="id_state" id="id_state"> <option value="">-</option> </select> </p> {/if} {/foreach} {if $stateExist eq "false"} <p class="required id_state select"> <label for="id_state">{l s='State'}<sup>*</sup></label> <select name="id_state" id="id_state"> <option value="">-</option> </select> </p> {/if} <p class="textarea"> <label for="other">{l s='Additional information'}</label> <span><textarea id="other" name="other" cols="26" rows="3" class="validate" data-validate="isMessage">{if isset($smarty.post.other)}{$smarty.post.other}{else}{if isset($address->other)}{$address->other}{/if}{/if}</textarea></span> </p> {if isset($one_phone_at_least) && $one_phone_at_least OR !isset($one_phone_at_least)} <p class="form_info required">{l s='You must register at least one phone number'}<sup class="required">*</sup></p> {/if} <p class="text float"> <label for="phone">{l s='Home phone'}{if isset($one_phone_at_least) && $one_phone_at_least}<sup>*</sup>{/if}</label> <span><input type="text" id="phone" name="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone}{else}{if isset($address->phone)}{$address->phone}{/if}{/if}" class="{if isset($one_phone_at_least) && $one_phone_at_least}is_required{/if} validate" data-validate="isPhoneNumber" /></span> </p> <p class="text"> <label for="phone_mobile">{l s='Mobile phone'}</label> <span><input type="text" id="phone_mobile" name="phone_mobile" value="{if isset($smarty.post.phone_mobile)}{$smarty.post.phone_mobile}{else}{if isset($address->phone_mobile)}{$address->phone_mobile}{/if}{/if}" class="validate" data-validate="isPhoneNumber" /></span> </p> <p class="required text" id="adress_alias"> <label for="alias">{l s='Address name'}<sup>*</sup></label> <span><input type="text" id="alias" name="alias" value="{if isset($smarty.post.alias)}{$smarty.post.alias}{else if isset($address->alias)}{$address->alias}{else if isset($select_address)}{l s='My address'}{/if}" class="is_required validate" data-validate="isGenericName" /></span> </p> <p class="submit"> {if isset($id_address)}<input type="hidden" name="id_address" value="{$id_address|intval}" />{/if} {if isset($back)}<input type="hidden" name="back" value="{$back}" />{/if} {if isset($mod)}<input type="hidden" name="mod" value="{$mod}" />{/if} {if isset($select_address)}<input type="hidden" name="select_address" value="{$select_address|intval}" />{/if} <input type="submit" name="submitAddress" id="submitAddress" value="{l s='Save'}" class="button" /> </p> <p class="required"><sup>*</sup>{l s='Required field'}</p> </fieldset> </form> <ul class="footer_links"> <li><a href="{$link->getPageLink('my-account.php', true)}" title="{l s='Back to your account'}">{l s='Back to your account'}</a></li> <li><a href="{$base_dir}" title="{l s='Home'}">{l s='Home'}</a></li> </ul> Link to comment Share on other sites More sharing options...
celine richard Posted January 30, 2017 Share Posted January 30, 2017 Bonjour Philippe Je rencontre le même souci que vous "jeton non valable" avec le thème biocosmetic... Avez-vous trouvé une solution pérenne au final (j'ai testé la désactivation des token qui fonctionne mais engendre d'autres soucis...) ? Merci d'avance pour votre réponse ! Céline Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now