2015-03-20 15 views
8

erişmek nasıl benim uygulamada, yii2 kullanarak nasıl karma şifre oluşturmak için kayıt fonksiyonu yapmak istiyorum.nerede yii2, daha önceki işlev koymak için denetleyici

bu i BeforeSave işlevini koymak zorundadır kullanıcı modelde SetPassword işlevini kullanın istiyorum benim UserController.php

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, 
      ]); 
     } 
    } 
} 

benim User.php

<?php 

namespace app\models; 

use Yii; 
use yii\base\NotSupportedException; 
use yii\db\ActiveRecord; 
use yii\base\Security; 
use yii\web\IdentityInterface; 
/** 
* This is the model class for table "users". 
* 
* @property string $userid 
* @property string $username 
* @property string $password 
*/ 

class User extends ActiveRecord implements IdentityInterface 
    { 

     public static function tableName() 
     { 
      return 'users'; 
     } 

     /** 
     * @inheritdoc 
     */ 
     public function rules() 
     { 
      return [ 
       [['username', 'password', 'password_hash','auth_key', 'password_reset_token'], 'required'], 
       [['username', 'password'], 'string', 'max' => 45], 
       [['auth_key'], 'string', 'max' => 32], 
       [['password_reset_token', 'password_hash'], 'string', 'max' => 255], 
       [['username'], 'unique'] 
      ]; 
     } 

     /** 
     * @inheritdoc 
     */ 
     public function attributeLabels() 
     { 
      return [ 
       'id' => 'ID', 
       'username' => 'Username', 
       'password' => 'Password', 
       'password_hash' => 'Password hash', 
       'auth_key' => 'Auth Key', 
       'password_reset_token' => 'Password Reset Token', 
      ]; 
     }  
     /** INCLUDE USER LOGIN VALIDATION FUNCTIONS**/ 
      /** 
     * @inheritdoc 
     */ 


     public static function findIdentity($id) 
     { 
      return static::findOne($id); 
     } 


     public static function findIdentityByAccessToken($token, $type = null) 
     { 
       return static::findOne(['access_token' => $token]); 
     } 


     /** 
     * Finds user by username 
     * 
     * @param string  $username 
     * @return static|null 
     */ 
     public static function findByUsername($username) 
     { 
      return static::findOne(['username' => $username]); 
     } 

     /** 
     * Finds user by password reset token 
     * 
     * @param string  $token password reset token 
     * @return static|null 
     */ 
     public static function findByPasswordResetToken($token) 
     { 
      $expire = \Yii::$app->params['user.passwordResetTokenExpire']; 
      $parts = explode('_', $token); 
      $timestamp = (int) end($parts); 
      if ($timestamp + $expire < time()) { 
       // token expired 
       return null; 
      } 

      return static::findOne([ 
       'password_reset_token' => $token 
      ]); 
     } 

     /** 
     * @inheritdoc 
     */ 
     public function getId() 
     { 
      return $this->getPrimaryKey(); 
     } 

     /** 
     * @inheritdoc 
     */ 
     public function getAuthKey() 
     { 
      return $this->auth_key; 
     } 

     /** 
     * @inheritdoc 
     */ 
     public function validateAuthKey($authKey) 
     { 
      return $this->getAuthKey() === $authKey; 
     } 

     /** 
     * Validates password 
     * 
     * @param string $password password to validate 
     * @return boolean if password provided is valid for current user 
     */ 
     public function validatePassword($password) 
     { 
      return $this->password === $password;//sha1($password); 
     } 

     /** 
     * Generates password hash from password and sets it to the model 
     * 
     * @param string $password 
     */ 
     public function setPassword($password) 
     { 
      $this->password_hash = Yii::$app->getSecurity()->generatePasswordHash($password);//Security::generatePasswordHash($password); 
     } 

     /** 
     * Generates "remember me" authentication key 
     */ 
     public function generateAuthKey() 
     { 
      $this->auth_key = Security::generateRandomKey(); 
     } 

     /** 
     * Generates new password reset token 
     */ 
     public function generatePasswordResetToken() 
     { 
      $this->password_reset_token = Security::generateRandomKey() . '_' . time(); 
     } 

     /** 
     * Removes password reset token 
     */ 
     public function removePasswordResetToken() 
     { 
      $this->password_reset_token = null; 
     } 

    } 

ve ben değiştirmeniz gerekir actionCreate işlevi? Yardım için

.

cevap

13

Modele yerleştirmelisiniz, çünkü bu yöntem yii\db\BaseActiveRecord'da bulunur. resmi dokümanlarında belirtildiği gibi geçersiz:

/** 
* @inheritdoc 
*/ 
public function beforeSave($insert) 
{ 
    if (parent::beforeSave($insert)) { 
     // Place your custom code here 

     return true; 
    } else { 
     return false; 
    } 
} 

Resmi belgeler:

+0

bitti bro. Yeni sorun yaşıyorum. Şifreyi şifrelemek için md5 veya sha1 kullanmaya çalışıyorum, ancak şifre doğrulamasında parola işlev değeri veritabanında farklıdır. – randawahyup

+0

Bu soruda açıklanan mevcut sorun çözülürse, lütfen kabul edilen cevabı işaretleyin (yeterli sayıda itibarınız olduğunda bunu da yapabilirsiniz) .. – arogachev

+0

oh tamam bro: D Bu brode yardımcı olabilir misiniz? http://stackoverflow.com/questions/29163843/validate-password-for-login-always-false-using-yii-2 – randawahyup

İlgili konular