Bonjour à vous,
je suis novice sur Symfony et je bute lors de la mise en production de mon site.
j'ai suivi les recommandations pour la mise en prod, à savoir notamment le CHMOD du cache et des logs à 777.
Jusqu'ici ok, or pour les besoins du client, il faut impérativement avoir un login pour naviguer sur le site, donc j'utilise FOSUser et sur mon controller de page d'accueil, j'ai bêtement fait un :
public function indexAction(Request $request) { if ($this->get('security.context')->isGranted("IS_AUTHENTICATED_FULLY")) {
return $this->render('YGCoreBundle:index:index.html.twig'); }else{
return $this->redirect($this->generateUrl('fos_user_security_login')); } }
j'ai surchargé le template du login pour une question de css, donc il reste essentiellement comme celui de FOS :
{% extends "FOSUserBundle::layout.html.twig" %}
{% trans_default_domain 'FOSUserBundle' %}
{% block fos_user_content %}
<div class="fondEntree">
<div class="pageEntree">
<form action="{{ path("fos_user_security_check") }}" method="post"> <input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
<p> <input type="text" id="username" name="_username" value="{{ last_username }}" required="required" placeholder="{{ 'security.login.username'|trans }}"/> </p>
<p class="loginPassword">
<input type="password" id="password" name="_password" required="required" placeholder="{{ 'security.login.password'|trans }}"/>
<input type="submit" id="_submit" name="_submit" value="OK" /> </p>
<p><i><a style="color:#bc9c01" href="{{ path('fos_user_resetting_check_email') }}">Mot de passe oublié ?</a></i></p>
</form>
</div>
</div>
{% endblock %}
Mon CSRF prend bien une valeur dans le code source.
Et dans mon layout du coreBundle appelé sur la page d'accueil, j'ai rajouté un petit check pour m'assurer que les anonymes n'accèdent pas au contenu du site, à savoir :
{% if is_granted("IS_AUTHENTICATED_REMEMBERED") %}
{% block header %}
{% endblock %}
{% block contenu %}
{% endblock %}
{% block footer %}
{% endblock %}
{% block JS %}
{% endblock %}
{% else %}
{% block entree %}
{{ render(controller("FOSUserBundle:Security:login")) }}
{% endblock entree %}
mon security.yml prend les valeurs suivantes :
main:
pattern: ^/
anonymous: true
provider: main
form_login:
login_path: fos_user_security_login
check_path: fos_user_security_check
csrf_provider: security.csrf.token_manager
Or je me retrouve toujours avec l'erreur invalid csrf token dans les logs...
Bien sûr je ne peux plus accéder à ma console (coresphere) par la même.
Lorsque j'ai monté le site, j'ai pu me connecter correctement le premier jour, mais le suivant, j'avais cette erreur d'invalid csrf token.
Si je vide mon cache à la main (dev et prod) et que je remets le CHMOD à 777 (avec récursivité aux dossiers et fichiers), je peux me reconnecter, mais le lendemain erreur csrf...
La plupart des post relatifs à cette erreur sont liés à l'absence du token, or ici il est bien présent.
Les droits sur le cache sont bien mis donc je ne comprends plus vraiment où est le problème...
Merci à vous si vous avez un embryon de réponse !
PS : je suis sur un mutalisé OVH pro
je suis passé en SetEnv PHP_VER 5_5 dans mon .htaccess mais toujours pareil
PPS : j'étais en IS_AUTHENTICATED_REMEMBERED et je suis passé en FULLY, vu que jen 'ai pas laissé l'option remember me
Hello,
merci pour la réponse, pour le provider je l'ai rajouté dans le form_login par contre, si je rajoute {{ form_enctype(form) }} il faut que je surcharge le controller security login de FOS car il ne passe pas de variable form. Ça permet quoi c form_enctype ici ?
euh ça a passé le sujet en résolu, mais c'est pas vraiment le cas... j'ai fait les changements et rien de plus, je vais revider le cache, et réessayer
Bon le problème reste le même malgré les changements que tu m'as conseillé et si je mets à false le csrf_protection j'ai une erreur d'authentification disant que le username a NONE_PROVIDED...
j'en perds mon latin