Bonjour,

J'utilise FOSUserBundle,
Après la connexion du membre, il est redirigé vers la route /home.
Une fois redirigé, si on clique sur le bouton "page précédente" du navigateur, on est redirigé vers la route /login avec le formulaire visible.

J'aimerai resté sur la route /home..
J'ai regardé la doc avec referrer, mais aucun résultat...

Sinon les redirections se font bien, c'est uniquement le clic sur le bouton précédent du navigateur qui pose problème..

Voici mon override sur le controller Security :

<?php
namespace AppBundle\Controller;

use \FOS\UserBundle\Controller\SecurityController as Controller;
use Symfony\Component\HttpFoundation\Request;

class SecurityController extends Controller
{
    public function loginAction(Request $request){
        if ($this->isGranted('IS_AUTHENTICATED_FULLY')){
            return $this->redirectToRoute('home');
        }
        return parent::loginAction($request);
    }

    public function checkAction()
    {
        if ($this->isGranted('IS_AUTHENTICATED_FULLY')){
            return $this->redirectToRoute('home');
        } else {
            return $this->redirectToRoute('index', array(), 301);
        }
    }
}

Merci d'avance

3 réponses


Hello.
Ca dépends un peu de ton application. Mais dans l'absolue arrange toi pour récuperer la route au moment ou juste avant que l'utilisateur face appel au formulare de connection (ca dépends de comment est fait ton formulaire) et change la redirection vers cette route là après l'action login.

Nikola
Auteur

Salut
Il faut que je récupère la route dans le formulaire, et que je le transmet au controleur ?
J'ai un formulaire en twig :

                <form action="{{ path("fos_user_security_check") }}" method="post">
                    {% if csrf_token %}
                        <input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
                    {% endif %}
                    <label for="username">{{ 'security.login.username'|trans }}</label>
                    <input type="text" id="username" name="_username" value="{{ last_username }}" required="required" autocomplete="username" />

                    <label for="password">{{ 'security.login.password'|trans }}</label>
                    <input type="password" id="password" name="_password" required="required" autocomplete="current-password" />

                    <input type="checkbox" id="remember_me" name="_remember_me" value="on" />
                    <label for="remember_me">{{ 'security.login.remember_me'|trans }}</label>

                    <input type="submit" id="_submit" name="_submit" value="{{ 'security.login.submit'|trans }}" />
                </form>

Et mon controller associé :

namespace AppBundle\Controller;

use \FOS\UserBundle\Controller\SecurityController as Controller;
use Symfony\Component\HttpFoundation\Request;

class SecurityController extends Controller
{
    public function loginAction(Request $request){
        if($this->isGranted('IS_AUTHENTICATED_FULLY')){
            $refererUrl = $request->getSession()->get('_security.main.target_path');
            return $this->redirectToRoute('home', ['refererUrl' => $refererUrl]);
        }
        return parent::loginAction($request);
    }

    public function checkAction()
    {
        if($this->isGranted('IS_AUTHENTICATED_FULLY')){
            return $this->redirectToRoute('home');
        } else {
            return $this->redirectToRoute('index', array(), 301);
        }
    }
}

Tiens, regarde par là, ca ne doit pas avoir beaucoup changé.

https://github.com/FriendsOfSymfony/FOSUserBundle/issues/889