Bonjour,
J’ai eu l’idée bancale il y a quelques mois de me lancer dans un projet énorme utilisant d’un côté Symfony pour gérer le back-end (données via API Platform, sécurité via Guard, Symfony Voters etc.) et d’un autre côté Vue pour un Front-end moderne et efficace. Sur l’essentiel maintenant, ça fonctionne.
Parmi les problèmes qui me restent à régler, il y a le cas de la redirection en cas d’erreur d’authentification. En gros, j’ai deux espaces sur l’application : une zone publique à la racine avec une demi-douzaine de pages publiques, et une zone privée où il faut avoir le ROLE_ADMIN de Symfony pour pénétrer. Cette sécurité est notamment définie dans le fichier security.yaml, section access_control. C’est une configuration tout à fait classique. Ces deux zones sont deux points d’accès différents définis dans le fichier webpack.config.js.
Ce qui se passe, c’est que si je rentre l’adresse "localhost:8000/admin" et que je ne suis pas identifié avant, j’ai une page blanche ; dans la console quand je charge la page, j’ai une erreur 403 sur "GET [blabla]/admin", ce qui est tout à fait normal, on est bien d’accord. Ce que je veux, c’est justement rediriger vers l’accueil du site, et je ne sais pas comment faire ça.
Ce que j’ai essayé du côte Symfony :
main:
entry_point: App\Security\AuthenticationEntryPoint
access_denied_handler: App\Security\AccessDeniedHandler
anonymous: true
json_login:
check_path: app_login
username_path: email
password_path: password
logout:
path: app_logout
J’ai défini les entry_point et access_denied_handler tirés de cette page. Même un "dd($request)" n’apparait pas.
Côté Vue, j’ai mis en place un "hook beforeeach" sur le Routeur.
router.beforeEach(async (to, from, next) => {
console.log('bouh')
const { requiresAuth } = to.meta;
if (requiresAuth) {
try {
await axios.get('/api/adminCheck')
.then(resp => {
console.log(resp.data);
});
next();
} catch (e) {
next('/error')
}
}
})
Le 'bouh' qui est censé apparaitre à chaque changement de page n’apparait que si on est identifié. Cela ne se déclenche pas sinon, ce qui me fait penser que tout le problème vient de Symfony, qui intercepte l’erreur avant que Vue ne se lance.
Quelqu’un saurait-il me conseiller pour avancer sur ce problème ? Comment réussir à localiser le moment où la redirection vers une erreur 403 ne se fait pas ? Comment savoir si le access_denied_handler défini dans security.yaml peut fonctionner ? A ce stade, même une page moche Symfony 403 me ferait plaisir à voir.
Merci.