Salut à tous,
j'aimerai mettre sur pied un système d'inscription après validation du mail un peu comme sur ce site http://www.grafikart.fr. du genre
un utilisateur entre les informations le concernant et après avoir validé qu'il soit redirigé vers sa boite mail ou il doit validé le lien d'enregistrement pour activé son compte.

mon soucis est que je n'arrive pas à savoir comment concevoir çela

4 réponses


Hello,
personnellement j'ai procédé comme ca :

  • signup : login avec adresse email, pass : XXX
  • enregistrement dans la table USERS du login, hash pass, active = 0, dans une table associée TOKENS j'enregistre un token_value généré aléatoirement, model = user, action = active, client_id = User.id de l'enregistrement de la table USERS
  • si les 2 enregistrements (USERS et TOKENS) se sont bien passés j'envoie un mail à l'adresse fourni avec un lien contenant le Token.token_value
  • quand le user cliquera sur le lien, la page en question vérifiera qu'il existe bien un token dans la base avec cette value, ce model (user) et cette action (active), si il en existe bien un, on récupère le Token.client_id
  • si c'est bien le cas il passera User.active = 1 pour le User.id = Token.client_id
  • si tout c'est bien passé, on supprime le token de la table
romses
Auteur

Merci pour ton soutien mais j'ai unpeu quelque souçi comment faire pour générer un token ?

pour générer la valeur du token tu peux faire comme tu veux, il faut une string plus ou moins longue et unique de préférence ;)
j'ai fais comme ceci : unique_id + le mail de l'utilisateur hashé en md5, tu peux faire ce que tu veux à mon avis, un unique_id suffit je pense.

    public function generate($mail = null)
    {
        if(!empty($mail))
        {
            // init : le token est vide
            $token = '';

            while($token == '')
            {
                // on créé une chaine unique
                $token = String::uuid() . '-' . md5($mail);

                // on charge le model Token dans le Component
                $this->Token = ClassRegistry::init('Token');

                // on regarde si se token est déja utilisé dans la bdd
                $user_token = $this->Token->find('first', array(
                    'fields' => array('id'),
                    'conditions' => array(
                        'value' => $token
                    )
                ));

                // si le token est utilisé alors on le vide et la boucle recommence pour en générer un nouveau
                if(!empty($user_token))
                {
                    $token = '';
                }
            }
            return $token;
        }
        else
        {
            return false;
        }
    }

J'ai mis cette fonction dans un Component, car plusieurs models ont besoin de générer des tokens

romses
Auteur

Merci je me met à l'oeuvre