Bonjour à tous !

Je suis en BTS Système Numérique option Informatique et Réseaux (SNIR), et je dois réaliser un site web avec le framework CakePHP 2.5 avec comme serveur web Wampp et ainsi PHPmyadmin.
J'ai suivit le tutoriel suivant de Grafikart "Tutoriel CakePHP - Système de membres". Ce tuto marche très bien ! (Merci en passant!)

-> Cependant j'aimerais ajouter directement les utilisateurs via la BDD et supprimer les inscriptions !
Le problème que je rencontre c'est le hashage des mots de passe. Quoi que je fasse quand je rentre un utilisateur depuis la BDD je n'arrive pas à me connecter..
(Mais quand je m'inscris puis me connecter ça fonctionne.)

Savez-vous comment résoudre ce problème ? Que dois-je rentrer comme paramètre (fonction, interclassements, etc..) pour pouvoir me connecter à mon site ?

Voici le contenue de ma BDD :

`numcarte` int(11) '',
 `username` varchar(50) utf8_general_ci
 `password` varchar(50) utf8_general_ci
 PRIMARY KEY (`numcarte`)

En espérant que vous pourrez m'aidé !

16 réponses


Lartak
Réponse acceptée

@massadu33: tu es totalement hors-contexte.
L'opération doit être dynamique et non manuelle, je vois mal son logiciel faire ce dont tu parles tout seul.

Si l'utilisateur doit absolument avoir un accès internet pour s'inscrire depuis ton logiciel, pourquoi est-ce que tu ne le fait pas sous un format de type API ?

Ton logiciel enverrait par exemple une requête à ton site, qui lui même ferait le traitement :

  • Si formulaire correct
    • ajout en base de données
    • renvoit des identifiants
  • Dans le cas contraire
    • retour d'un code/message d'erreur

Salut vou pouver ajouter cette fonction dans le User model

namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;

class User extends Entity
{

// ...

protected function _setPassword($password)
{
    if (strlen($password) > 0) {
      return (new DefaultPasswordHasher)->hash($password);
    }
}

// ...

}

Comme ça
Hope ça marche

Merci pour cette réponse, mais ce n'est pas ce que je recherche.

Je recherche qu'est-ce je dois mettre comme paramètre pour password dans la BDD afin de pouvoir insérer mes données de connexion sans passer par une inscription sur le site, mais via la BDD

Cordialement

Bonjour, Je pense que ce que tu veux ne peut pas se faire. CakePHP a sa manière de hasher les mots de pass et de les comparer lors de le connexion. Ce que tu peux faire c'est transformer l'action d'inscription en ajout d'utilisateur.

Bonjour.
Si vous voulez dire que vous voulez ajouter des utilisateurs sans hacher les mots de passes, en plus d'être largement déconseillé ce n'est pas possible sur CakePHP.
Par contre si vous voulez dire que vous voulez ajouter des utilisateurs via un backoffice par exemple, il vous suffit d'utiliser la méthode normale pour insérer des données et de suivre ceci : Authentification » Hachage des mots de passe.

@Tarik El Jabiri: Ce serait bien que tu lise entièrement son sujet, car il spécifie bien que c'est pour CakePHP 2 et non CakePHP 3, car ce que tu lui proposes n'est valable que pour CakePHP 3.

Bonjour,

@Tarik El Jabiri: Oui je suis bien sur CakePHP 2.

@Lartak: Je voudrais pouvoir ajouté depuis la base de donnée (et non le site) des utilisateurs (avec les paramètres associés, que je ne connais pas et n'arrive pas à trouver sur internet) mais cela ne fonctionne pas.
Ca fonctionne seulement quand j'inscrit un utilisateur sur le site. Et pour mon projet je ne dois pas devoir inscrire via le site. Mais depuis la base de donnée.

Cordialement,
Bluuegaame

Salut,

Il me semble que CakePHP 2 utilise par defaut le md5 pour hasher ses mots de passe .

Pour mettre dans ta BBD un mot de passe directement hasher tu vas sur un site de cryptage md5 et ensuite tu l'insert dans ton champs password de ta table user

Cela devrait fonctionner lorsque tu utiliseras ta fonction login. Enfin si c'est bien ça ta demande

Bonjour Massadu33,

Premièrement merci pour l'information sur le hashage par défault !

Je viens d'essayer de rentrer un utilisateur avec le hashage md5, ça hash bien le mot de passe comme si je l'avais rentrer depuis le site.

Mais reste un soucis, le compte rentrer via la BDD refuse de se connecter, malgré que je hashage est correct, avez-vous une idée ?

Cordialement

S'il ne se connecte pas c'est que le hash par defaut n'est pas du md5.

Pour vérifier cela rajoute dans ta fonction login

echo $this->Auth->password('tonmotdepasseenclair'); die();

et compare avec le mot de passe généré.

Sinon tu peux forcer cake à utiliser du md5 :

Dans ton AppController:

public $components = array(
'Auth' => array(
'authenticate' => array(
'Form' => array(
'passwordHasher' => array(
'className' => 'Simple',
'hashType' => 'md5'
)
)
)
)
);

Malgré votre code, je n'arrive toujours pas à me connecter... Le mot de passe retourné correspond pourtant.
Mais encore une fois quand je le rentre depuis la BDD il refuse systématiquement la connexion sur le site..

Malgré votre code, je n'arrive toujours pas à me connecter... Le mot de passe retourné correspond pourtant.

Est-ce que tu fais la comparaison avec un enregistrement que tu as ajouté depuis le Framework ou en dehors du Framework ?
Si tu fais la comparaison avec un enregistrement ajouté via le Framework, c'est normal que ça corresponde, pour t'en assurer, tu devrais faire la comparaison entre le mot de passe généré par le composant Auth et la fonction md5.
Au passage, si tu veux utiliser le hachage md5, il te faut prendre en compte la modification qu'il a faite dans son commentaire, soit de remplacer sha256 par md5.
Sinon, pourquoi est-ce que tu ne veux pas laisser le framework faire les nouveaux enregistrements des utilisateurs ?

Le compte que j'enregistre, je l'enregistre depuis la BDD avec la fonction 'MD5' donc c'est en dehors du framework.
C'est surrement ce que tu annonces, le site ne doit surrement faire la différence entre fait via Cake et sans Cake, et du coups ça me coince, et j'ai essayer les code de Massadu33, mais sans résultats.. malgrès que dans la bdd le mdp soit bien en MD5 !

Ce site est un projet de fin d'année de BTS Système Numérique Option Informatique et Réseaux (SNIR), et un logiciel codé en C# doit pouvoir ajouter des comptes, donc dans la BDD, et l'utilisateur doit pouvoir chez lui se connecter avec les identifiants que on lui aura fournit. C'est donc cette contrainte de Framework, et de création de comptes hors du site.

Alors je viens de faire un petit tour sur la doc de cakephp :

pour crypter tes mots de passe à l'extérieur de cakephp et te connecter avec la fonction this->auth->login :

  • récupère la valeur du Security.salt dans ton core.php (dans la version2 cakephp utilise la valeur du salt pour crypter les mots de passe )
  • rends toi par exemple sur https://www.sha1.fr/
  • met la valeur du salt+ton mot de passe en clair (sans espace) et tu hash ton mot de passe.
  • tu récupères ce mot de passe hashé et tu le met dans ta bdd dans le champs password.
  • tu te connecte avec ton fonction $this->auth->login()

Sinon le mieux reste encore de créer tes utilisateurs via cakephp

@Lartak : je ne crois pas avoir lu quelque part qu'il voulait faire son ajout d'utilisateur dynamiquement.
Ensuite libre à lui de vouloir créer une fonction dynamique en C# qu'il lui insert ses utilisateurs ! son problème ne vient pas de là. Il me semble que son VRAI problème vient de sa fonction $this->auth->login()

Et effectivement vu que cakePHP hash le password en sha1 en prenant en compte la clef de sécurité SALT, s'il rentre dynamiquement ou manuellement un utilisateur en base cela ne fonctionnera absolument pas (d'ou son problème).

Bref @bluuegame tu as plusieurs pistes, à toi de jouer :)

je ne crois pas avoir lu quelque part qu'il voulait faire son ajout d'utilisateur dynamiquement.

Pourtant :

Ce site est un projet de fin d'année de BTS Système Numérique Option Informatique et Réseaux (SNIR), et un logiciel codé en C# doit pouvoir ajouter des comptes

Donc pour moi ça doit être dynamique.

Bonjour à tous !
Désolé pour cette inactivité depuis 9/10 jours.

Oui @massadu33 mon logiciel ne peut pas géré la redirection vers le site sha1.fr..

C'est une bonne idée @Lartak, je vais me pencher la dessus, et essayer tes idées ! Merci

Merci à vous pour vos réponses !