8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,
voilà j'aimerai déjà savoir dans un premier temps si la communauté d'alsacréations utilise le framework cakephp?
Car je m'y suis un peu mis et je suis un peu pommé, car j'ai suivit un tuto de grafikart pour la création de formulaire d'inscription/connexion et chez moi le hashage du mot de passe pose problème... en fait tout l'envoi à ma base me pose problème.

Je suis en train de tourner en rond et je m'y perd maintenant un peu. Donc si quelqu'un peu m'aider ce serai vraiment gentil.

alors voici ma vue Users/signup.ctp:
<h2>S'enregistrer</h2>
<?php echo $this->Form->create('User'); ?>
	<?php echo $this->Form->input('pseudo',array('label'=>"Pseudo : ")); ?>
	<?php echo $this->Form->input('mail',array('label'=>"Email : ")); ?>
	<?php echo $this->Form->input('password',array('label'=>"Mot de passe : ")); ?>
	<?php echo $this->Form->input('dob',array('label'=>"Date de naissance : ", 
												'dateFormat' => 'DMY', 
												'minYear'=> date('Y')-80, 
												'maxYear'=>date('Y')-10)); ?>
 	<?php $options = array('H' => 'Homme' , 'F' => 'Femme'); ?>
 	<?php echo $this->Form->input('sexe',array('options' => $options,'type' => 'select',
 												'empty' => false,'label' => 'Sexe'));?>
<?php echo $this->Form->end("S'enregistrer"); ?>



Le début de mon controller UsersController.php:
<?php
/**
*  controller pour les Users
*/
class UsersController extends AppController
{
	
	function signup()
	{
		if($this->request->is('post')){
			$d=$this->request->data;
			// Pour bien faire un ajout dans la base et non une modification en cas d'ajout de champs...
			$d['User']['id'] = null;
			$d['User']['lastlogin'] = '2009-07-07 12:00:00';
			$d['User']['password'] = Security::hash($d['User']['password'],null,true);
			
			if($this->User->save($d,true,array('pseudo','mail','password','dob','sexe'))){
				$link = array('controller'=>'users','action'=>'activate',$this->User->id.'-'.md5($d['User']['password']));
				App::uses('CakeEmail','Network/Email');
				$mail = new CakeEmail();
				$mail->from('noreply@localhost.com')
					 ->to($d['User']['mail'])
					 ->subject('Test :: Inscription')
					 ->emailFormat('html')
					 ->template('signup')
					 ->viewVars(array('pseudo'=>$d['User']['pseudo'],'link'=>$link))
					 ->send();
				$this->Session->setFlash("Votre compte a bien été créé","notif");
			}
			else{
				$this->Session->setFlash("Merci de corriger vos erreurs","notif", array('type'=>'error'));
			}
		}
	}

	function login(){
		if($this->request->is('post')){
			if($this->Auth->login()){
				$this->Session->setFlash("Vous êtes maintenant connecté","notif");
				$this->redirect("/");
			}
			else{
				$this->Session->setFlash("Identifiants incorrects","notif",array('type'=>'error'));
				debug($this->request->data['User']['password']);
			}
		}
	}


et enfin mon model User.php:
<?php 
/**
* Model de User
*/
class User extends AppModel
{
	public $validate = array(
		'pseudo' => array(
			array(
				'rule' => 'alphanumeric',
				'required' => true,
				'allowEmpty' => false,
				'message' => "Votre pseudo n'est pas valide"
				),
			array(
				'rule' => 'isUnique',
				'message' => 'Ce pseudo est déjà pris'
				)
		),
		'mail' => array(
			array(
				'rule' => 'email',
				'required' => true,
				'allowEmpty' => false,
				'message' => "Votre adresse email n'est pas valide"
				),
			array(
				'rule' => 'isUnique',
				'message' => 'Cet Email est déjà pris'
				)
		),
		'password' => array(
			'rule' => 'notEmpty',
			'allowEmpty' => false,
			'message' => "Entrez un mot de passe"
		),
		'dob' => array(
			'rule' => 'notEmpty',
			'required' => true
		)
	);
}
?>



Ma connexion est impossible car le hash du mot de passe n'est pas identique... dans la base de donnée il est toujours au format sha1 malgrès cette ligne:
$d['User']['password'] = Security::hash($d['User']['password'],null,true);
Modérateur
Salut,

Non tu ne trouveras pas grand monde ici pour t'aider sur Cake. Tu devrais te tourner vers http://forum.cakephp-fr.org/

Dans ton code, je ne vois pas l'appel du composant Auth. Il est imperatif que tu appelles ce composant pour que tu puisses mettre en place un environnement securisé. Aussi, tu devras surcharger la méthode beforeFilter et la faire hériter explicitement dans tes autres class (parent::beforFilter).

Un gros conseil, si tu es novice ou faux novice en PHP, ne commence pas par un framework. Tu vas au casse pipe. La charue avant les boeufs n'est jamais une bonne solution.

happy dev Smiley cligne
Modifié par niuxe (25 Aug 2012 - 14:45)
Je te remercie Smiley cligne
Je ne suis pas vraiment novice, j'ai une formation de developpeur web, je connais donc bien les modele MVC et la POO. Donc je ne pense pas mettre la charue avant les boeufs, mais merci Smiley smile

Tu as l'air de t'y connaitre un peu sur cakephp non?
Préferes tu utiliser cake, ou les grosse machine comme zend, symfony?
Sinon pour l'appel a Auth je pense que c'est la non? dans le fichier AppCOntroller.php:

App::uses('Controller', 'Controller');

/**
 * Application Controller
 *
 * Add your application-wide methods in the class below, your controllers
 * will inherit them.
 *
 * @package       app.Controller
 * @link  http://book.cakephp.org/2.0/en/controllers.html#the-app-controller
 
 */
class AppController extends Controller {
	public $components = array('Session','Cookie',
		'Auth' => array( 
			'authenticate' => array(
				'Form' => array(
					'scope' => array('User.active' => 1)
				)
			)
		)
	);

	function beforeFilter(){
		$this->Auth->allow();
	}
}