Comment enregistrer de mot de passe utilisateur de Hachage format en DB dans Yii2
J'ai besoin de créer un nouvel utilisateur. Et je veux enregistrer le mot de passe dans hachage format en DB. Mais j'ai échoué à plusieurs reprises.
Voici mon code:
Contrôleur de
public function actionCreate()
{
$model = new User();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
Utilisateur Modèle
public function validatePassword($password)
{
return Security::validatePassword($password, $this->password_hash);
}
/**
* Generates password hash from password and sets it to the model
*
* @param string $password
*/
public function setPassword($password)
{
$this->password_hash = Security::generatePasswordHash($password);
}
Utilisateur Des Règles De La Table
public function rules()
{
return [
[['c_authkey', 'inserttime'], 'required'],
[['c_branch', 'c_roleid', 'c_active', 'c_status'], 'integer'],
[['c_expdate', 'inserttime', 'updatetime'], 'safe'],
[['username', 'c_desig', 'insertuser', 'updateuser'], 'string', 'max' => 50],
[['password'], 'string', 'max' => 32],
[['c_authkey'], 'string', 'max' => 256],
[['c_name'], 'string', 'max' => 100],
[['c_cellno'], 'string', 'max' => 15],
[['username'], 'unique']
];
}
Ce que je suis absent? quelle est la solution?
Vous avez deux états (est-ce un copier+coller erreur ou partie de votre question?). Supprimer le premier car c'est celui de la démo ne pas utiliser le composant de sécurité.
C'est une partie de ma question. J'ai supprimé la Première. Mais c'est une économie de seulement statique mot de passe comme d': 123.. Comment puis-je les convertir en de hachage et de les enregistrer dans la base de données .. merci
Alors s'il vous plaît modifier la question pour contenir le code qui est réellement la cause de votre problème
merci. J'ai édité ma question lignes. c'est une économie de seulement statique mot de passe comme d': 123.. Comment puis-je les convertir en de hachage et de les enregistrer dans la base de données. merci
Quel est le nom de votre champ de mot de passe dans la base de données?
C'est une partie de ma question. J'ai supprimé la Première. Mais c'est une économie de seulement statique mot de passe comme d': 123.. Comment puis-je les convertir en de hachage et de les enregistrer dans la base de données .. merci
Alors s'il vous plaît modifier la question pour contenir le code qui est réellement la cause de votre problème
merci. J'ai édité ma question lignes. c'est une économie de seulement statique mot de passe comme d': 123.. Comment puis-je les convertir en de hachage et de les enregistrer dans la base de données. merci
Quel est le nom de votre champ de mot de passe dans la base de données?
OriginalL'auteur | 2014-06-29
Vous devez vous connecter pour publier un commentaire.
Vous permet d'économiser de l'unhashed mot de passe
password
au lieu depassword_hash
. Ceci peut être accompli en utilisantActiveRecord::beforeSave()
pour définir le mot de passe de la valeur àpassword_hash
. Vous devez également utiliser un nom différent pour le champ mot de passe dans le formulaire de direpassword_field
.Où placer ce code dans le modèle?
mon modèle utilisateur de l'extension \yii\db\ActiveRecord, mais lorsque j'utilise beforeSave méthode, il n'est pas en invoquant beforeSave() du modèle, dans UserController je suis en utilisant $model->save() la méthode
OriginalL'auteur topher
Peu de choses sont floues, mais j'espère vous donner suffisamment d'informations pour résoudre votre problème et je n'ai pas assez de rep pour ajouter un commentaire.
Lors de l'utilisation de la
setPassword
vous permettra d'obtenir une chaîne de caractères supérieur à votreVARCHAR(32)
de configuration dans la table de base de données. Au moinsVARCHAR(64)
. Exemple de chaîne de caractères qui sera retournée est$2a$12$FbbEBjZVTLPZg4D/143KWu0ptEXL7iEcXpxJ.MNMl8/6L0SV5FR6u
. Réglez ce également dans votre modèle afin de le rendre le travail de validation.Vous devrez dire à votre modèle pour utiliser le hachage de mot de passe lors de l'enregistrement du modèle.
Cet exemple vient de l'
Yii2/Advanced
app. Dans le cadre de votre contrôleur pour la création d'un utilisateur. Ils envoyer la demande à$model->signup()
dans les avancées de l'application (Frontend Sitecontroller exemple)Ajuster votre modèle actuel de hacher le mot de passe avant d'enregistrer ou d'ajouter une nouvelle fonction, ils utilisent 'inscription' dans l'exemple (Modèle pour l'inscription exemple). Après le modèle de validation sur le terrain a été couronnée de succès de traitement de la demande. Modifiez les champs suivants selon votre table.
Pour le débogage des erreurs de validation, vous pouvez ajouter
print_r($model->getErrors());
derrière tout$model->save();
Espère que cela va vous donner suffisamment d'informations pour obtenir votre problème résolu.
OriginalL'auteur Bvlent