2016-11-02 2 views
1

Ich kann nicht mit diesem Skript erfolgreich anmelden.yii2 Hashing Passwort registrieren und Anmelden

Loginform.php

public function validatePassword($attribute, $params) 
{ 
    if (!$this->hasErrors()) { 
     $user = $this->getUser(); 

     if (!$user || $user->validatePassword($this->password)) { 
      $this->addError($attribute, 'Incorrect name/password.'); 
     } 

    } 
} 

In meinem Modell habe ich dieses

User.php

public function beforeSave($insert) { 
    if (parent::beforeSave($insert)) { 
     if ($this->isNewRecord) { 
      $this->password = $this->setPassword($this->password); 
     } 
     return true; 
    } 
    return false; 
} 

public function validatePassword($password) { 
    return Yii::$app->getSecurity()->validatePassword($password, $this->password); 
} 

public function setPassword($password) { 
    return $this->password = Yii::$app->security->generatePasswordHash($password); 

} 

Hier ist meine Anmeldung Skript

Signupform.php

public function signup() { 
    if($this->validate()) { 

     $user = new User(); 
     $user->username = $this->username; 
     $user->email = $this->email; 
     $user->setPassword($this->password); 
     $user->save(); 
     return $user; 
    } 

    return null; 
} 

Kann mir jemand dabei helfen bitte? Vielen Dank.

+0

diese $ von Anmeldungen Funktion entfernen user-> setPassword ($ this-> Passwort); Sie definds es bereits im Benutzermodell deforeSave Funktion –

+0

funktioniert nicht, es ist nichts in meine Tabelle eingefügt .. können Sie die Skripte anpassen? danke – kaizer

+0

es kann einige Validierung Fehler print_r ($ user ->. getError()); sterben(); können Sie dies bitte überprüfen –

Antwort

0

Folgen dieser:

Modell User.php

public $c_password; //Define a variable for confirm password 

//This is rule 

public function rules() { 
    return [ 
     [['fname', 'lname', 'username', 'password',], 'required'], 
     [['fname', 'lname', 'authKey', 'accessToken'], 'string', 'max' => 100], 
     [['authKey', 'accessToken'], 'safe'], 
     [['username'], 'unique'], 
     ['c_password', 'required'], 
     ['c_password', 'compare', 'compareAttribute' => 'password', 'message' => "Passwords don't match"], 

    ]; 
} 


public function beforeSave($insert) { 
      if (parent::beforeSave($insert)) { 
       $this->password = Yii::$app->security->generatePasswordHash($this->password); 
       return true; 
      } else { 
       return false; 
      } 
     } 

iam eine Funktion im Site-Controller für die Registrierung erstellen Sie ein Modell nach Ihrem Bedarf erstellen können

SiteController.php

public function actionRegister() { 
    $model = new \app\models\Users; 
    if ($model->load(Yii::$app->request->post()) && $model->save()) { 
     Yii::$app->session->setFlash('register', 'Registration Successful'); 
     return $this->redirect(['login']); 
    } else { 
     return $this->render('register', ['model' => $model]); 
    } 
} 

Und das ist meine Ansicht Datei register.php

<?php 
    $form = ActiveForm::begin([ 
    'id' => 'login-form', 
    'options' => ['class' => 'form-horizontal'], 
     'fieldConfig' => [ 
     'template' => "{input}\n{error}", 
     'options' => [ 
     'tag' => false, 
     ], 
      ], 
    ]); 
?>   
<?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?> 

<?= $form->field($model, 'password')->passwordInput([]) ?> 

<?= $form->field($model, 'c_password')->passwordInput([]) ?> 
<button type="submit">Sign up</button> 
<?php ActiveForm::end(); ?> 
+0

Danke für diesen Bruder !! – kaizer

Verwandte Themen