sfGuard extension gestion d'une arborescence

Une fois les étapes de création du projet, je commencerai à m’intéresser à l’objet User.

symfony propel-generate-crud back user User

Maintenant un petit jeu de données sur le modèle proposé par Askeet (le salted SHA1 me plait bien!!)

User:
  mazenovi:
    username:   mazenovi
    prenom: Vincent
    nom:  Mazenod
    password: mazenovi
    email: mazenovi@caramail.com
    blog: http://blog.onfamp.net
    homepage: http://vmazenod.free.fr
    presentation: un petit mot pour dire que
  r1bzh:
    username: r1bzh
    password: r1bzh
  ld:
    username: ld
    password:

Pour que ca marche il faut écrire la méthode setPassword dans lib/model/User.php

getUsername().$this->getEmail());
    $this->setSalt($salt);
    $this->setSha1Password(sha1($salt.$password));
  }
}

on écrit le script de chargement

initialize();
$data = new sfPropelData();
$data->loadData(sfConfig::get('sf_data_dir').DIRECTORY_SEPARATOR.'fixtures');
?>

on l’exécute

php batch/load_data.php

Reste à gérer l’authentification.
On commence par ajouter une action login au controleur

public function executeLogin()
  {
    if ($this->getRequest()->getMethod() != sfRequest::POST)
    {
      return sfView::SUCCESS;
    }
    else
    {
      return $this->redirect('@homepage');
    }
  }

Ensuite la vue correspondante loginSuccess.php



'form_login')) ?>

nom d'utilisateur get('username')) ?>
password
getAttribute('referer')) ?>

Maintenant la validation du formulaire d’uathentification apps/back/modules/user/validate/login.yml

methods:
  post: [username, password]

names:
  username:
    required:     true
    required_msg: le nom d'utilisateur est obligatoire
    validators:   [usernameValidator, userValidator]

  password:
    required:     true
    required_msg: le mot de passe est obligatoire

usernameValidator:
    class:        sfStringValidator
    param:
      min:        2
      min_error:  le mote de passe doit comporter plus de 2 caractères

userValidator:
    class:         myLoginValidator
    param:
      password:    password
      login_error: nom d'utilisateur ou mot de passe invalide

Une fois fait reste à écrire le Helper de validation apps/back/lib/myLoginValidator.class.php

setParameter('login_error', 'Invalid input');
    $this->getParameterHolder()->add($parameters);
    return true;
  }

  public function execute(&$value, &$error)
  {
    $password_param = $this->getParameter('password');
    $password = $this->getContext()->getRequest()->getParameter($password_param);
    $login = $value;
    $c = new Criteria();
    $c->add(UserPeer::USERNAME, $login);
    $user = UserPeer::doSelectOne($c);
    if ($user)
    {
      if (sha1($user->getSalt().$password) == $user->getSha1Password())
      {
        $this->getContext()->getUser()->signIn($user);
        return true;
      }
    }
    $error = $this->getParameter('login_error');
    return false;
  }
}

Reste encore à écrire les méthodes signIn et signOut du sf User dans apps/back/lib/myUser.class.php

setAuthenticated(true);
    $this->setAttribute('nom', $user->getNom());
    $this->setAttribute('prenom', $user->getPrenom());
    $this->setAttribute('username', $user->getUsername());
  }

  public function signOut()
  {
    $this->getAttributeHolder()->clear();
    $this->clearCredentials();
    $this->setAuthenticated(false);

  }
  public function getUsername()
  {
    return $this->getAttribute('username');
  }

  public function getPrenom()
  {
    return $this->getAttribute('prenom');
  }

  public function getNom()
  {
    return $this->getAttribute('nom');
  }
  public function __toString(){
    return $this->getUsername();
  }
}

vider le cache de symfony

symfony cc

et faire un teste sur http://mydomain/user/login

partager cet article
  • Facebook
  • Twitter
  • del.icio.us
  • Google Bookmarks
  • Digg
  • Technorati
  • Wikio FR
  • Yahoo! Buzz
  • Netvibes
  • Ping.fm
  • HelloTxt
  • MySpace
  • Tumblr
  • FriendFeed
  • LinkedIn
  • viadeo FR
  • email
  • PDF
Posted by: mazenovi on 13 août 2007 @ 20 h 21 min
Filed under: dev

Pas de commentaire »

Pas encore de commentaire.

Flux RSS des commentaires de cet article. TrackBack URL

Laisser un commentaire