# PluginOutlet manquant pour le composant second-factor.gjs et pour second-factor-add-totp.gjs

**URL:** https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542
**Category:** Development
**Tags:** development
**Created:** [Octobre 14, 2025, 12:41 UTC](https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542 "2025-10-14T12:41:13Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![Yan\_Rudenko](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yan_rudenko/32/493431_2.png) [@Yan\_Rudenko](https://meta.discourse.org/u/Yan_Rudenko)
#### Post date: [Octobre 14, 2025, 12:41 UTC](https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542/1 "2025-10-14T12:41:13Z")

</div>

Salut  
J’ai récemment commencé à travailler avec Discourse et, d’après mon expérience d’une semaine, je peux certainement dire que le niveau d’entrée est assez élevé pour un développeur qui a réellement besoin de modifier les éléments de base. Cela est dû au manque de documentation/informations réelles, surtout si nous parlons des nouvelles options les plus récentes, car je ne trouve que des choses qui ne fonctionnent plus pour la version 3.6.0 plutôt que la nouvelle approche, et même si j’en trouve, le niveau de détail est faible, pas d’exemples concrets ou d’explications plus détaillées sur la façon d’utiliser les choses.  
Néanmoins, je dois modifier le composant **second-factor-add-totp.gjs** et je n’ai pas pu le faire car il n’y a aucune information sur la façon de le faire correctement dans mon thème personnalisé.  
J’ai trouvé qu’il existe quelque chose appelé **PluginOutlet** qui est conçu pour fonctionner comme un crochet que vous pouvez utiliser pour injecter votre code personnalisé ou même modifier la sortie si l’élément est encapsulé dans **PluginOutlet** (pas sûr, il y a quelque chose comme **api.renderInOutlet** , mais je n’ai trouvé aucune information normale sur la façon de l’utiliser). En regardant ces composants Ember, je ne vois pas de **PluginOutlet** qui pourrait éventuellement aider à faire au moins quelques manipulations avec la structure en utilisant au moins du JS pur.

Pouvez-vous clarifier si c’est quelque chose qui peut être ajouté là et si je peux l’utiliser pour modifier la structure de la fenêtre modale ou au moins utiliser du JS pur pour déplacer certains éléments à leur place.  
Aussi, peut-être que je n’ai pas trouvé, mais existe-t-il une documentation avec des exemples pour les nouvelles approches ?

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [Octobre 14, 2025, 1:46 UTC](https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542/2 "2025-10-14T13:46:19Z")

</div>

Pouvez-vous partager plus de détails sur votre objectif final afin que nous puissions vous donner de meilleurs conseils ?

---

<div class="post-metadata">

### Author: ![Yan\_Rudenko](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yan_rudenko/32/493431_2.png) [@Yan\_Rudenko](https://meta.discourse.org/u/Yan_Rudenko)
#### Post date: [Octobre 14, 2025, 2:04 UTC](https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542/3 "2025-10-14T14:04:37Z")

</div>

Bien sûr.  
Donc, selon la version « modifiée » que j’ai, je dois mettre à jour un peu la conception pour la modale MFA (lorsque l’utilisateur doit configurer une application d’authentification pour la MFA).  
Par mise à jour, j’entends par exemple déplacer le code QR dans la structure HTML, pour être plus précis, le texte du site « js.user.second\_factor.enable\_description », le code QR devrait se trouver quelque part entre le nouveau texte fourni (balisage HTML).  
Un autre exemple est de s’assurer que « Entrer manuellement » affiche plutôt le code réel qui peut être copié en cliquant dessus (manuellement via un déclencheur JS pour qu’il apparaisse et le déplacer simplement).

Tout cela peut être réalisé à l’aide de manipulations JS régulières, sans reconstruction réelle de la structure du composant d’origine, mais le principal défi pour moi est de trouver un endroit où ce JS peut être placé afin qu’il soit déclenché lorsque la modale est ouverte, ce que je n’ai pas encore réussi à trouver.

Clarification supplémentaire : j’utilise un thème personnalisé qui est stocké à l’aide de l’option GIT.

Faites-moi savoir si quelque chose n’est pas clair.

---

<div class="post-metadata">

### Author: ![Yan\_Rudenko](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yan_rudenko/32/493431_2.png) [@Yan\_Rudenko](https://meta.discourse.org/u/Yan_Rudenko)
#### Post date: [Octobre 16, 2025, 12:38 UTC](https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542/4 "2025-10-16T12:38:08Z")

</div>

Salut @Falco , as-tu des suggestions ?

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Octobre 16, 2025, 1:53 UTC](https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542/6 "2025-10-16T13:53:54Z")

</div>

Salut @Yan_Rudenko, les meilleures documentations pour commencer sont probablement ce tutoriel :

> [@Theme Developer Tutorial: 1. Introduction](https://meta.discourse.org/t/theme-developer-tutorial-1-introduction/357796?silent=true):
>
> This tutorial will teach you how to create a Discourse Theme or Theme Component from the ground up. While this topic assumes no previous experience working on Discourse themes, it does assume some prior experience using [HTML](https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML), [CSS](https://developer.mozilla.org/en-US/docs/Learn/CSS) and [JavaScript](https://developer.mozilla.org/en-US/docs/Learn/JavaScript). It’ll also help if you [know your way around GitHub](https://guides.github.com/activities/hello-world/). What are Discourse themes? A theme or theme component is a set of files packaged together designed to either modify Discourse visually or to add new features. Themes In general, themes are not suppo…

Comme vous l’avez mentionné, les Plugin Outlets sont le meilleur moyen de personnaliser l’interface utilisateur. Mais ils ne sont pas disponibles partout. Seules certaines parties de l’interface utilisateur sont conçues pour être personnalisées.

> [@Yan\_Rudenko](#):
>
> Tout cela peut être réalisé en utilisant des manipulations JS classiques,

Manipuler le DOM avec du JS classique provoquera des erreurs, car notre framework de rendu perdra le contrôle des éléments qu’il a rendus à l’écran. Il est préférable de s’en tenir aux plugin outlets pris en charge et aux autres API JS de Discourse (également abordées dans le tutoriel).

---

<div class="post-metadata">

### Author: ![Yan\_Rudenko](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yan_rudenko/32/493431_2.png) [@Yan\_Rudenko](https://meta.discourse.org/u/Yan_Rudenko)
#### Post date: [Octobre 16, 2025, 3:03 UTC](https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542/7 "2025-10-16T15:03:15Z")

</div>

Salut @david, merci pour le lien du tutoriel, mais je l’ai déjà consulté et je n’y ai pas trouvé les réponses que je cherchais. Les exemples eux-mêmes sont basiques et ne couvrent pas, par exemple, comment obtenir une catégorie spécifique (au lieu de faire un appel ajax) ou comment utiliser l’API Discourse dans le code (mentionné sur [https://docs.discourse.org/](https://docs.discourse.org/)), qui est présente d’après ce que je sais et vois. C’est pourquoi j’ai écrit ici afin d’obtenir plus de détails de la part des personnes qui travaillent avec Discourse au quotidien et qui connaissent beaucoup de choses qui ne sont pas présentes dans la documentation.

Je comprends tout à fait que l’utilisation de JS pur puisse causer des problèmes, mais c’est la seule chose à laquelle j’ai pensé pour l’instant. Peut-être qu’à l’avenir, je serai en mesure de modifier certaines choses de manière plus appropriée s’il y en a.

Donc, si je comprends bien, dans la version actuelle de Discourse que j’utilise, qui est 3.6.0.beta2-latest, les changements que j’ai mentionnés ne pourront pas être réalisés avec les outils intégrés de Discourse ? En raison de l’absence de PluginOutlets dans ces composants ?

L’équipe de développement envisage-t-elle d’ajouter cela aux composants mentionnés dans les futures versions, car je suppose qu’il n’y a pas de problèmes techniques, mais une question de décision de la part des personnes qui travaillent sur ce sujet ?

Merci.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Octobre 16, 2025, 3:52 UTC](https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542/8 "2025-10-16T15:52:26Z")

</div>

> [@Yan\_Rudenko](#):
>
> L’équipe de développement envisage-t-elle d’ajouter ces éléments aux composants mentionnés dans les futures versions, car je suppose qu’il n’y a pas de problèmes techniques, mais une question de décision de la part de certaines personnes qui travaillent dessus ?

Oui ! Vous êtes invité à créer une PR pour le cœur de Discourse qui introduit de nouveaux points de sortie.

Je ne peux pas promettre qu’elle sera acceptée immédiatement. Mais une fois que nous aurons un point de départ, il sera plus facile de poursuivre la discussion.

---

<div class="post-metadata">

### Author: ![Yan\_Rudenko](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yan_rudenko/32/493431_2.png) [@Yan\_Rudenko](https://meta.discourse.org/u/Yan_Rudenko)
#### Post date: [Octobre 16, 2025, 4:40 UTC](https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542/9 "2025-10-16T16:40:05Z")

</div>

@david, merci pour la proposition, je l’examinerai lorsque j’aurai le temps de le faire, mais vous devez comprendre que pour une personne qui vient d’arriver sur Discourse, cela peut prendre du temps, car je dois déterminer comment en préparer un avec les bonnes modifications + comme vous l’avez mentionné, l’étape d’approbation + le temps avant qu’il n’entre dans la prochaine version elle-même.  
J’espérais que l’équipe de développement, beaucoup plus qualifiée, pourrait le préparer en 1 heure s’il s’agissait seulement d’ajouter un wrapper PluginOutlet et quelques éléments dans les composants à différents endroits (je pourrais me tromper), ce qui réduirait le temps nécessaire pour l’intégrer dans la nouvelle version.

Néanmoins, comme je l’ai mentionné ci-dessus, j’examinerai votre proposition.

Cependant, je n’ai toujours pas reçu de réponse concernant ma question, à savoir s’il est possible de faire les choses que j’ai mentionnées dans la version actuelle de Discourse ou si les modifications que j’ai mentionnées doivent d’abord être ajoutées/contribuées (ajout du PluginOutlet dans ces composants) ?

La raison pour laquelle je pose cette question est que j’ai un périmètre de travail qui doit être effectué, mais je ne peux pas le faire et je dois fournir une explication à l’équipe sur la raison pour laquelle je ne peux pas le faire, donc soit le périmètre de travail sera modifié pour faire ce que nous pouvons, soit je devrai contribuer dans l’espoir que cela sera ajouté au cœur et publié dans la prochaine version. J’ai donc besoin d’une confirmation de l’équipe de développement de Discourse quant à la faisabilité de cela.

En regardant également le dépôt principal [GitHub - discourse/discourse: A platform for community discussion. Free, open, simple.](https://github.com/discourse/discourse), je ne vois pas la section des problèmes à côté des Pull Requests, où les gens créent habituellement des problèmes décrivant si quelque chose est cassé ou manquant.

---

<div class="post-metadata">

### Author: ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)
#### Post date: [Octobre 16, 2025, 5:02 UTC](https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542/10 "2025-10-16T17:02:26Z")

</div>

> [@Yan\_Rudenko](#):
>
> Je regarde donc le dépôt principal [GitHub - discourse/discourse : Une plateforme pour la discussion communautaire. Libre, ouverte, simple.](https://github.com/discourse/discourse), mais je ne vois pas la section « Issues » à côté des « Pull requests », là où les gens créent habituellement des tickets pour signaler un bug ou une fonctionnalité manquante.

Les bugs vont dans #Contribute > Bug, les fonctionnalités manquantes dans #Contribute > Feature (ou dans #Development pour les cas comme les outlets de plugins).

> [@Yan\_Rudenko](#):
>
> délai avant que cela n’arrive dans la prochaine version.

Utilisez-vous la branche stable ? Il y a alors pas mal de temps avant la prochaine version stable, mais sinon, vous n’avez pas besoin d’attendre que les commits soient ajoutés à la dernière branche après la fusion de la PR.

---

<div class="post-metadata">

### Author: ![Yan\_Rudenko](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yan_rudenko/32/493431_2.png) [@Yan\_Rudenko](https://meta.discourse.org/u/Yan_Rudenko)
#### Post date: [Octobre 16, 2025, 5:47 UTC](https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542/11 "2025-10-16T17:47:15Z")

</div>

Salut @Moin , merci pour cette information !

J’utilise une configuration Docker pour Discourse et vous avez soulevé une bonne suggestion concernant la branche, oui, je pourrais peut-être la changer une fois le PR fusionné et ne pas attendre la sortie réelle.

En regardant **app.yml** , je vois qu’il utilise la version (branche) **tests-passed** , qui, d’après ce que je vois sur GIT, n’est probablement pas la meilleure à utiliser pour la stabilité. Laquelle est préférée, **main** ou passer sur le **dernier tag**? Est-il possible de passer sur un tag du tout pour une configuration Docker ?

---

<div class="post-metadata">

### Author: ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)
#### Post date: [Octobre 16, 2025, 5:54 UTC](https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542/12 "2025-10-16T17:54:52Z")

</div>

tests-passed est le dernier : ["tests-passed" is now "latest"](https://meta.discourse.org/t/tests-passed-is-now-latest/384272?u=moin)

Main n’est pas recommandé pour une utilisation en production.

> [@Understanding Discourse release channels](https://meta.discourse.org/t/understanding-discourse-release-channels/264400?u=moin):
>
> bookmark This guide explains the different types of Discourse releases and how different channels are used for updates. person_raising_hand Required user level: All users Release channels Discourse has four primary release channels, each serving a different purpose: main, latest[[1]](#footnote-1286715-1), beta, and stable. The default channel used when installing a production version of Discourse is latest. The naming conventions used by Discourse differ a bit from other software companies: main On GitHub…

---

<div class="post-metadata">

### Author: ![Yan\_Rudenko](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yan_rudenko/32/493431_2.png) [@Yan\_Rudenko](https://meta.discourse.org/u/Yan_Rudenko)
#### Post date: [Octobre 17, 2025, 10:04 UTC](https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542/13 "2025-10-17T10:04:47Z")

</div>

@david , @Falco J’ai créé une [PR](https://github.com/discourse/discourse/pull/35465), veuillez l’examiner et me faire savoir si quelque chose manque. J’ai besoin que cela progresse dès que possible, donc si vous pouviez le prioriser d’une manière ou d’une autre, je vous en serais très reconnaissant.

---

<div class="post-metadata">

### Author: ![Yan\_Rudenko](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yan_rudenko/32/493431_2.png) [@Yan\_Rudenko](https://meta.discourse.org/u/Yan_Rudenko)
#### Post date: [Octobre 24, 2025, 6:05 UTC](https://meta.discourse.org/t/missing-pluginoutlet-for-second-factor-gjs-component-and-for-second-factor-add-totp-gjs/385542/14 "2025-10-24T18:05:47Z")

</div>

@david , je voulais juste vous remercier pour la revue et la fusion si rapides de la PR.
