Skip to content
Extraits de code Groupes Projets
Valider d9ee3cf0 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

validation des comptes nouveau : on appelle la fonction...

validation des comptes nouveau : on appelle la fonction confirmer_statut_inscription depuis action_confirmer_inscription_dist avant de loger l'auteur.
Dans auth_init_droits on fait appel a une autorisation autoriser(loger) qui par defaut autorise tous les statuts sauf 5poubelle
En surchargeant cette autorisation on peut interdire le login au auteur 'nouveau' a confirmer, et les obliger a utiliser le lien de confirmation par email
+ gestion de l'echec login dans le formulaire de login pour afficher un message d'erreur (on affiche une erreur classique du type mot de passe incorrect pour ne pas donner d'information sur l'existence d'un login)
parent f850465f
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -36,6 +36,9 @@ function action_confirmer_inscription_dist() {
and $auteur['email'] == $email
and $auteur['statut'] == 'nouveau'
) {
// d'abord on confirme son statut
$auteur = confirmer_statut_inscription($auteur);
// OK c'est un nouvel inscrit qui confirme :
// on le loge => ca va confirmer son statut et c'est plus sympa
......
......@@ -302,11 +302,15 @@ function confirmer_statut_inscription($auteur) {
return $auteur;
}
$s = $auteur['prefs'];
// securite, au cas ou prefs aurait ete corrompu (ou deja ecrase par un tableau serialize)
if (!preg_match(',^\w+$,', $s)) {
$s = '6forum';
}
include_spip('inc/autoriser');
if (!autoriser('inscrireauteur', $auteur['prefs'])) {
if (!autoriser('inscrireauteur', $s)) {
return $auteur;
}
$s = $auteur['prefs'];
include_spip('inc/autoriser');
// accorder l'autorisation de modif du statut auteur
......
......@@ -202,10 +202,16 @@ function auth_mode() {
* si la globale est vide ce n'est pas un tableau, on la force pour empêcher un warning.
*
* @param array $row
* @return array|string
* @return array|string|bool
*/
function auth_init_droits($row) {
include_spip('inc/autoriser');
if (!autoriser('loger', '', 0, $row)) {
return false;
}
if ($row['statut'] == 'nouveau') {
include_spip('action/inscrire_auteur');
$row = confirmer_statut_inscription($row);
......@@ -254,7 +260,6 @@ function auth_init_droits($row) {
// A noter : le premier appel a autoriser() a le bon gout
// d'initialiser $GLOBALS['visiteur_session']['restreint'],
// qui ne figure pas dans le fichier de session
include_spip('inc/autoriser');
if (!autoriser('ecrire')) {
return $row;
......@@ -525,7 +530,9 @@ function auth_loger($auteur) {
// initialiser et poser le cookie de session
unset($_COOKIE['spip_session']);
auth_init_droits($auteur);
if (auth_init_droits($auteur) === false) {
return false;
}
// initialiser les prefs
$p = $GLOBALS['visiteur_session']['prefs'];
......
......@@ -257,6 +257,24 @@ function autoriser_defaut_dist($faire, $type, $id, $qui, $opt) {
and !$qui['restreint'];
}
/**
* Autorisation a se loger ? Retourne true pour tous les statuts sauf 5poubelle
* Peut etre surchargee pour interdire statut=nouveau a se connecter
* et forcer l'utilisation du lien de confirmation email pour valider le compte
*
* @param $faire
* @param $type
* @param $id
* @param $qui
* @param $opt
* @return bool
*/
function autoriser_loger_dist($faire, $type, $id, $qui, $opt) {
if ($qui['statut'] == '5poubelle') {
return false;
}
return true;
}
/**
* Autorisation d'accès à l'espace privé ?
......
......@@ -231,7 +231,12 @@ function formulaires_login_verifier_dist($cible = "", $login = "", $prive = null
if ($session_remember !== null) {
$auteur['cookie'] = $session_remember;
}
auth_loger($auteur);
// si la connexion est refusee on renvoi un message erreur de mot de passe
// car en donnant plus de detail on renseignerait un assaillant sur l'existence d'un compte
if (auth_loger($auteur) === false) {
$erreurs['message_erreur'] = _T('login_erreur_pass');
return $erreurs;
}
return (is_null($prive) ? is_url_prive($cible) : $prive)
? login_autoriser() : array();
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter