2015-03-20 5 views
8

Chcę, aby funkcja rejestracji w mojej aplikacji, jak utworzyć hash hasłem za pomocą yii2.gdzie umieścić funkcję beforesave w Yii2, jak uzyskać dostęp w kontrolerze

to moja 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; 
     } 

    } 

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

chcę użyć funkcji SetPassword w modelu użytkownika, gdzie muszę umieścić funkcję beforesave i muszę zmienić actionCreate funkcja?

dziękuję za pomoc.

Odpowiedz

13

Powinieneś umieścić go w swoim modelu, ponieważ ta metoda znajduje się w yii\db\BaseActiveRecord. Zastępują je jak wspomniano w oficjalnych dokumentów:

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

     return true; 
    } else { 
     return false; 
    } 
} 

Oficjalne dokumenty:

+0

to zrobić brachu. Mam nowy problem. Próbuję użyć md5 lub sha1 do zaszyfrowania hasła, ale w funkcji sprawdzania poprawności hasła wartość sha1 jest inna w przypadku bazy danych. – randawahyup

+0

Jeśli bieżący problem opisany w tym pytaniu zostanie rozwiązany, proszę zaznaczyć odpowiedź jako zaakceptowaną (można ją również przejąć, gdy będzie wystarczająco dużo reputacji). – arogachev

+0

oh ok bro: D możesz pomóc temu bracie? http://stackoverflow.com/questions/29163843/validate-password-for-login-always-false-using-yii-2 – randawahyup

Powiązane problemy