[spip-dev] Option pour se connecter à l'inscription

Plutôt que de faire un plugin exprès, alors qu'il n'y a presque rien, ce serait plus simple et plus propre d'ajouter l'option directement dans l'action d'inscription. Surtout que comme ce serait suivant un drapeau/option, ça ne changerait rien à l'existant.

Donc à la fin de l'action, avant le return, je propose d'ajouter :

// Avant de finir, on connecte possiblement le nouvel utilisateur directement
if (
  // Si c'est défini globalement dans une variable
  (defined('_INSCRIPTION_FORCER_CONNEXION') and _INSCRIPTION_FORCER_CONNEXION)
  // Ou si on l'a demandé dans les options lors de l'appel
  or (isset($options['forcer_connexion']) and $options['forcer_connexion'] == true)
) {
  // On connecte le nouvel utilisateur
  include_spip('inc/auth');
  auth_loger($desc);
}

Pourquoi en option ? Quel serait l’intérêt de ne pas connecter à l’inscription ?

Parce que pour le moment, par défaut, c'est SPIP qui génère ton mot de passe et tu DOIS confirmer ton email pour prouver que tu existes, et dans cet email là tu as le lien avec le jeton pour confirmer.

C'est donc plutôt un choix quand on veut vraiment faciliter et/ou qu'on est dans un cas où les gens ne vont pas s'inscrire avec des faux emails etc (par exemple pour un truc de commerce, les gens doivent donner leurs vraies infos et en plus ça fluidifie de pas faire d'étape en plus).

Mais par défaut on continue de vérifier pour avoir une base plus "qualitative", en demandant de confirmer l'email (même s'il n'y a pas de mot de passe à générer et qu'on le donne à l'inscription d'ailleurs, comme avec le plugin idoine, qui est d'ailleurs en discussion pour intégrer le core https://core.spip.net/issues/3778).

Là ce que je propose c'est vraiment un truc très simple qui ne chamboule rien à l'existant. :slight_smile:

Heu ? Attendre la vérification de l’email et l’envoie du login/password avant de connecter qui que ce soit à SPIP ?

Il me semble que c’est le minimum à faire, sinon pourquoi proposer de s’inscrire ? Sinon n’importe qui peux créer des comptes à la chaîne…

Je ne comprends pas trop d'où tu veux ajouter ce code car :

1/ dans le core on connecte automatiquement les users lorsqu'ils confirment leur email
https://core.spip.net/projects/spip/repository/entry/spip/ecrire/action/confirmer_inscription.php#L43

2/ je pense que tu fais donc référence au plugin qui surcharge le process d'inscription pour demander le mot de passe au moment de l'inscription et éviter de l'envoyer par email.
Mais dans ce cas il me semble que tu peux y mettre la connexion à l'inscription, vu que ça nécessite 2 lignes de code.

Je ne vois pas trop l'intérêt de mettre ce code optionnel dans le core dans la mesure où il ne sera alors utilisable qu'avec ce plugin...

Mais j'ai peut-être pas tout compris ?

Cela dit, de manière plus générale et sur le fond, il faudrait repenser ce problème d'inscription sur le core, car on ne peut en effet pas continuer à envoyer des mots de passe par email.

On peut revoir complètement le process d'inscription, ou alternativement abandonner par défaut l'utilisation des mots de passe en utilisant des liens de connexion périssables envoyés par email (le mot de passe serait alors une option activable/utilisable une fois identifié, pour les redacteurs/admin uniquement)

Renvoie de ma réponse de 2h du mat' qui apparemment n'est jamais arrivée.

Pourquoi en option ? Quel serait l'intérêt de /ne pas connecter à
l'inscription /?

Parce que pour le moment, par défaut, c'est SPIP qui génère ton mot de passe et tu DOIS confirmer ton email pour prouver que tu existes, et dans cet email là tu as le lien avec le jeton pour confirmer.

C'est donc plutôt un choix quand on veut vraiment faciliter et/ou qu'on est dans un cas où les gens ne vont pas s'inscrire avec des faux emails etc (par exemple pour un truc de commerce, les gens doivent donner leurs vraies infos et en plus ça fluidifie de pas faire d'étape en plus).

Mais par défaut on continue de vérifier pour avoir une base plus "qualitative", en demandant de confirmer l'email (même s'il n'y a pas de mot de passe à générer et qu'on le donne à l'inscription d'ailleurs, comme avec le plugin idoine, qui est d'ailleurs en discussion pour intégrer le core [sécurité - inscription] : éviter l'envoi de mot de passe en clair par email et laisser l'utilisateur choisir son mot de passe (#3778) · Tickets · spip / spip · GitLab).

Là ce que je propose c'est vraiment un truc très simple qui ne chamboule rien à l'existant. :slight_smile:

Pas spécialement que avec ce plugin.

Le fait de générer ou pas un mot de passe, c'est un problème différent de celui d'avoir absolument envie qu'il confirme son email en cliquant sur un URL avec jeton de confirmation. Ce sont deux choses différentes, et même en lui proposant de fournir lui-même son mot de passe, on peut tout à fait continuer à vouloir qu'il confirme son email pour valider le compte.

Donc le fait de connecter la personne directement à la fin de l'inscription, c'est quelque chose qui peut se faire avec ou sans la définition du mot de passe, ça n'a rien à voir.

Après oui, il faut aussi refondre l'inscription mais c'est plus gros, là ma proposition est un truc tout con. Il n'y a pas spécialement de pipeline "fin d'inscription", donc moi ça me parait bizarre que ce soit à chacun et à chaque fois, de trouver où se mettre pour connecter à la fin quand on en a envie (pour du commerce ou autre, là moi c'est pour un site culturel).

Là quand on a besoin, on fait :
define('_INSCRIPTION_FORCER_CONNEXION', true);
et paf, on sait que ça va le faire.

Heu… quitte à faire cela, ça ne pourrait pas être une option de configuration plutôt ? parce que bon les constantes cachées…

MM.

Je ne sais pas trop… ça me parait vraiment un truc qu'on n'active que pour quelques projets précis, une fois pour toute.

Par défaut on laisse le fait de devoir confirmer son email pour avoir une base d'inscrit⋅e⋅s plus qualitative.

Sur quelques projets, l'aspect qualitatif des inscriptions est assuré par d'autres moyens : par exemple sur un site de commerce les gens laissent de l'argent, donc sauf super exception, ils vont mettre leurs vrais infos au moment de créer leur compte, et du coup on peut (on devrait même, c'est une bonne pratique il me semble) les connecter directement, d'autant plus que ça fluidifie le processus, avec moins de coupure. (Ce n'est pas le seul cas, là j'en ai besoin pour un site qui n'est pas du commerce.)

Donc j'ai plus l'impression que c'est dans le code du projet (qui peut être un squelette/ditrib réutilisable) qu'on l'active parce qu'on en a besoin pour ce cas d'utilisation : quand on active le projet (par plugins/squelettes) hop, ça marche tout de suite comme ça.

Après ça peut être les deux sinon… Quand le define() est défini, ça force la connexion de toute façon, et sinon on regarde une meta venant de l'interface de config…

moué tout ça me parait assez bancal, et surtout je vois pas tant la généricité que ça.
Ou bien ton inscription se fait par un formulaire spécifique, tu peux y mettre les 2 lignes de code qui font loger l'auteur dans le traiter() de ton inscription.
Ou bien ton inscription se fait par le formulaire standard qui envoie un mot de passe par mail et je vois pas le principe de le loger sans rien vérifier...

Je suis pas trop pour insérer cette verrue cachée dans la version stable (mais pour repenser ça sur la version dev, oui)
(surtout que c'est un define qu'il faudra se trainer ensuite pour ne pas casser les sites existants)

Ou bien ton inscription se fait par un formulaire spécifique, tu peux y
mettre les 2 lignes de code qui font loger l'auteur dans le traiter() de
ton inscription.

Non, ça utilise le formulaire fourni par SPIP, modifié ou pas.

Ou bien ton inscription se fait par le formulaire standard qui envoie un
mot de passe par mail et je vois pas le principe de le loger sans rien
vérifier...

Comme déjà dit, je ne vois pas le rapport entre l'envoi du mot de passe et le fait de se connecter directement.

Tout comme on peut vouloir confirmer dans les deux cas, on peut vouloir connecter dans les deux cas : c'est sans rapport avec le mot de passe (donc aussi valable pour le formulaire dist).

Le lien-jeton de confirmation n'a aucun rapport avec le mot de passe (d'ailleurs il connecte justement la personne SANS taper le mot de passe) : il sert à confirmer son email, pas son mot de passe.

Confirmer que l'email existe c'est un choix qu'on peut vouloir faire (c'est le choix par défaut) que ce soit SPIP qui génère le mot de passe OU que ce soit la personne qui le choisit à l'inscription. Dans les deux cas on peut vouloir confirmer l'email avant que son compte ne s'active vraiment.

Et parfois inversement, en ayant conscience de ce qu'on fait, on veut passer outre la confirmation de l'email, parce qu'on estime qu'on aura pas ou très peu de merde et que notre base sera qualitative de toute façon. Dans ce cas on décide de connecter la personne directement.

Moi je ne vois pas en quoi ce serait à chacun de trouver le bon endroit pour le faire, sachant en plus qu'il n'y a pas de pipeline de fin d'inscription. Un formulaire CVT ce n'est pas une API : c'est une interface qui appelle ensuite possiblement des fonctions communes dans le traitement (fonctions qui peuvent être utilisées par d'autres types d'interfaces que les formulaires web).

On peut faire l'inscription depuis le formulaire fourni (ce que je fais parfois), ou depuis un autre formulaire perso (ce que je fais parfois aussi) : dans les deux cas on utilise action/inscrire_auteur, et c'est *ça* qui est commun. Donc c'est là que doit se faire la connexion d'après moi, et non pas par-ci par-là disséminé dans des composants d'interface web.

je vois pas tant la généricité que ça

Ce qui est générique, c'est de le faire dans une fonction commune d'API, et pas dans tel ou tel composant d'interface web précis. Ça me parait quand même clairement plus propre, et s'il y a plusieurs manières d'être inscrit (pas toujours par le même composant), dans tous les cas on a le même comportant attendu à la fin.

Propreté, mutualisation, cohérence, toussa…

Actuellement c'est ce que je fais.
Je traite toujours les inscriptions par un CVT spécifique (avec un champ "mot de passe"), qui me permet de logger la personne et de faire des actions en plus à la création du compte (vérifier des trucs, inscrire dans une zone d'accès restreint, etc).
J'ai rarement un cas "générique", et cette config/constante n'apporterait rien.

Si c'est à repenser c'est peut être plus au niveau des pipelines ?

Un CVT est un *composant d'interface* spécifique, un formulaire web.

Y compris dans un même site, certaines actions peuvent avoir lieu par plusieurs canaux différents, que ce soit l'inscription ou l'édition d'un contenu :
- par un formulaire CVT "dist" par défaut
- + dans un autre formulaire spécifique au projet
- + par une API JSON à distance
- + possiblement encore d'autres choses

Mon avis, que je partage au moins avec moi-même :smiley: (mais on me dit dans l'oreillette que c'est une bonne pratique de développement), c'est que ce n'est *absolument pas* à des composants d'interface de faire tels et tels traitements génériques communs d'édition, d'inscription etc. C'est d'ailleurs bien pour cela que l'on a, au moins théoriquement, des API (pas encore assez ! il y a justement encore trop de choses qui sont faites dans les CVT d'après moi). C'est aux CVT ou à d'autres canaux d'appeler ces API génériques.

Là on a une interface commune qui est "action/inscrire_auteur" et c'est là que devrait être le processus complet sans rien laisser de côté, sauf si c'est vraiment propre à une interface précise.

Et dans tous les cas : se connecter à la fin est un choix qui peut (doit) être fait sans être développeureuse :
- j'ai un site qui a des inscriptions
- j'estime que ma base d'inscrits sera qualitative de toute façon ou je m'en fous
- je veux activer la connexion directement parce que c'est ergonomique pour les gens dans mon contexte
- je fais comment si je ne suis pas devs ?

Ça ne devrait définitivement pas être à chacun⋅e de (savoir) coder ça dans son coin…

En attendant, ben oui… moi-qui-sait, j'ai mis ça dans le pipeline "formulaire_traiter" du formulaire par défaut… entre autre. :frowning:

Sinon, en tant que dev, oui c'est possible qu'il manque un pipeline *hors* CVT, dans action/inscrire_auteur pour dire "pre_inscription" et "post_inscription" ? Ça ne résout pas le problème pour les non-devs, mais ce serait déjà une entrée plus propre que passer par des CVT précis !

Est-ce que ça déjà ça pourrait être ajouté dès la 3.1 d'après vous ?

sans avoir suivi en détail toute la conversation, je plussoie au fait de mettre des pipelines dans les actions, et pas que dans les cvt.

mais dans ce cas là, on ne pourrait pas envisager un pipeline générique post action?

Maïeul a écrit :

mais dans ce cas là, on ne pourrait pas envisager un pipeline générique
post action

pas évident que ça ait du sens, parce que les actions ne renvoient rien, et que ton pipeline ne pourra pas savoir si l'action a réussi, ce qu'elle a fait etc…

A défaut ce serait juste un pipeline de type trigger pour dire 'telle action a été lancée', mais on ne peut pas garantir à 100% qu'il serait appelé :
- si l'action sort par un exit c'est mort (pas d'appel du trigger)
- si l'action est appelée en direct sous forme de fonction et pas par une URL ?action=xxx, on n'aura pas non plus d'appel de ce pipeline générique

Pour avoir quelque chose de propre, il faudrait donc que l'appel soit fait dans toutes les actions, manuellement, avec les éventuels arguments qui ont du sens au cas par cas

Maïeul a écrit :

mais dans ce cas là, on ne pourrait pas envisager un pipeline générique post action

pas évident que ça ait du sens, parce que les actions ne renvoient rien, et que ton pipeline ne pourra pas savoir si
l'action a réussi, ce qu'elle a fait etc…
A défaut ce serait juste un pipeline de type trigger pour dire 'telle action a été lancée', mais on ne peut pas garantir
à 100% qu'il serait appelé :
- si l'action sort par un exit c'est mort (pas d'appel du trigger)

Le exit n'est il pas pratique à proscrire, comme le goto ?

- si l'action est appelée en direct sous forme de fonction et pas par une URL ?action=xxx, on n'aura pas non plus
d'appel de ce pipeline générique

Pour ces situations, il faudrait appeler le pipeline post action explicitement après l'appel de la fonction d'action.

Pour faciliter cela il pourrait y avoir une fonction wrapper pour les appels de ces fonctions d'actions,
comme pour beaucoup d'autres fonctionnalités SPIP il me semble (autorisations, accès à la bdd, aux fichiers...)

Pour avoir quelque chose de propre, il faudrait donc que l'appel soit fait dans toutes les actions, manuellement, avec
les éventuels arguments qui ont du sens au cas par cas

Bof

JL