[Bug] Formulaire d'inscription (pas de test de login déjà existant)

Salut tout le monde !
Déjà un grand merci à tout le monde pour ce formidable CMS qu’est SPIP !!!
J’ai trouvé un bug sur le formulaire d’inscription ( SPIP 4.0.5 mais surement aussi anterieur), aucun test n’est fait pour vérifier que le login n’existe pas déjà. Il en résulte qu’on peut créer un 2e utilisateur avec le même login.
J’ai fais ma petite correction (je ne suis pas encore bien a l’aise pour le pousser dans git) et donc je vous la propose. J’ai modifier le fichier /squelettes-dist/formulaires/inscription.php, plus spécifiquement la fonction formulaires_inscription_verifier_dist
J’ai ajouté :

include_spip('auth/spip');

et modifié (ajout du dernier elseif) :

	if (!$nom = _request('nom_inscription')) {
		$erreurs['nom_inscription'] = _T('info_obligatoire');
	} elseif (!nom_acceptable(_request('nom_inscription'))) {
		$erreurs['nom_inscription'] = _T('ecrire:info_nom_pas_conforme');
	} elseif ($msgerr = auth_spip_verifier_login(_request('nom_inscription'))) {
	    $erreurs['nom_inscription'] = $msgerr;
	}

ce qui donne au final :

function formulaires_inscription_verifier_dist($mode = '', $id_ou_options = 0, $retour = '') {
	set_request('_upgrade_auteur'); // securite
	include_spip('inc/filtres');
	include_spip('auth/spip');
	$erreurs = array();

	// Compatibilité avec l'ancien param "id" dans les deux sens
	list($options, $id) = formulaires_inscription_arguments_id_options($id_ou_options);

	include_spip('inc/autoriser');
	if (!autoriser('inscrireauteur', $mode, $id)
		or (strlen(_request('nobot')) > 0)
	) {
		$erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
	}

	if (!$nom = _request('nom_inscription')) {
		$erreurs['nom_inscription'] = _T('info_obligatoire');
	} elseif (!nom_acceptable(_request('nom_inscription'))) {
		$erreurs['nom_inscription'] = _T('ecrire:info_nom_pas_conforme');
	} elseif ($msgerr = auth_spip_verifier_login(_request('nom_inscription'))) {
	    $erreurs['nom_inscription'] = $msgerr;
	}
	if (!$mail = strval(_request('mail_inscription'))) {
		$erreurs['mail_inscription'] = _T('info_obligatoire');
	}

	
	
	// compatibilite avec anciennes fonction surchargeables
	// plus de definition par defaut
	if (!count($erreurs)) {
		include_spip('action/inscrire_auteur');
		if (function_exists('test_inscription')) {
			$f = 'test_inscription';
		} else {
			$f = 'test_inscription_dist';
		}
		$declaration = $f($mode, $mail, $nom, $options);
		if (is_string($declaration)) {
			$k = (strpos($declaration, 'mail') !== false) ?
				'mail_inscription' : 'nom_inscription';
			$erreurs[$k] = _T($declaration);
		} else {
			include_spip('base/abstract_sql');

			if ($row = sql_fetsel(
				'statut, id_auteur, login, email',
				'spip_auteurs',
				'email=' . sql_quote($declaration['email'])
			)) {
				if (($row['statut'] == '5poubelle') and empty($declaration['pass'])) {
					// irrecuperable
					$erreurs['message_erreur'] = _T('form_forum_access_refuse');
				} else {
					if (($row['statut'] != 'nouveau') and empty($declaration['pass'])) {
						if (intval($row['statut']) > intval($mode)) {
							set_request('_upgrade_auteur', $row['id_auteur']);
						} else {
							// deja inscrit
							$erreurs['message_erreur'] = _T('form_forum_email_deja_enregistre');
						}
					}
				}
				spip_log($row['id_auteur'] . ' veut se resinscrire');
			}
		}
	}

	return $erreurs;
}

J’ai fait mes petits test, ça a l’air de fonctionner.
Merci,
Bredt

Merci pour le signalement et la proposition de patch. Sur le sujet, on a déjà un define _INTERDIRE_AUTEUR_MEME_EMAIL qui permet d’éviter que deux comptes portent le même mail, mais pas pour le login.

À noter, on est en train de « passer en arrière plan » la notion de login (cf #4351 - Login par email (cookie spip_admin) - spip - SPIP on GIT), par exemple SPIP affiche l’email dans le form d’identification (au lieu du login). Et des plugins comme Open Source / loginhash · GitLab permettent de se passer complètement du login.

À voir donc si on intègre ce patch. Peux-tu poser ton message dans un ticket ici Issues - spip - SPIP on GIT stp ?

Je note ! Mais si je peux mettre un bémol : qu’on puisse se connecter avec un email a la place d’un login est une bonne chose, mais il faut garder la notion de nom/pseudo, en effet les « visiteurs » n’ont pas forcement envie que leur mail soit visible quand ils participent au forum ou par commentaire … Or la notion de nom/pseudo dans le formulaire d’inscription des visiteurs est confondue avec celle de login (à une suppression d’accent près) !
Je vais ouvrir un ticket … mais j’ai l’impression qu’on est obligé de passer par son compte github si je ne m’abuse … ok je m’abuse : https://contrib.spip.net/spip.php?page=identifiants&focus=nom_inscription&mode=1comite&lang=fr

SPIP à toujours séparés l’identifiant du nom / pseudo visible :slight_smile:

Ce que je veux dire c’est que si on supprime la notion de login, il faut garder la saisie du nom/pseudo dans le formulaire #FORMULAIRE_INSCRIPTION{6forum} … mais bon c’était pas forcement très claire …