You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							189 lines
						
					
					
						
							4.2 KiB
						
					
					
				
			
		
		
	
	
							189 lines
						
					
					
						
							4.2 KiB
						
					
					
				| <?php | |
| namespace common\models; | |
|  | |
| use Yii; | |
| use yii\base\NotSupportedException; | |
| use yii\behaviors\TimestampBehavior; | |
| use yii\db\ActiveRecord; | |
| use yii\web\IdentityInterface; | |
|  | |
| /** | |
|  * User model | |
|  * | |
|  * @property integer $id | |
|  * @property string $username | |
|  * @property string $password_hash | |
|  * @property string $password_reset_token | |
|  * @property string $email | |
|  * @property string $auth_key | |
|  * @property integer $status | |
|  * @property integer $created_at | |
|  * @property integer $updated_at | |
|  * @property string $password write-only password | |
|  */ | |
| class User extends ActiveRecord implements IdentityInterface | |
| { | |
|     const STATUS_DELETED = 0; | |
|     const STATUS_ACTIVE = 10; | |
|  | |
|  | |
|     /** | |
|      * @inheritdoc | |
|      */ | |
|     public static function tableName() | |
|     { | |
|         return '{{%user}}'; | |
|     } | |
|  | |
|     /** | |
|      * @inheritdoc | |
|      */ | |
|     public function behaviors() | |
|     { | |
|         return [ | |
|             TimestampBehavior::className(), | |
|         ]; | |
|     } | |
|  | |
|     /** | |
|      * @inheritdoc | |
|      */ | |
|     public function rules() | |
|     { | |
|         return [ | |
|             ['status', 'default', 'value' => self::STATUS_ACTIVE], | |
|             ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]], | |
|         ]; | |
|     } | |
|  | |
|     /** | |
|      * @inheritdoc | |
|      */ | |
|     public static function findIdentity($id) | |
|     { | |
|         return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]); | |
|     } | |
|  | |
|     /** | |
|      * @inheritdoc | |
|      */ | |
|     public static function findIdentityByAccessToken($token, $type = null) | |
|     { | |
|         throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.'); | |
|     } | |
|  | |
|     /** | |
|      * Finds user by username | |
|      * | |
|      * @param string $username | |
|      * @return static|null | |
|      */ | |
|     public static function findByUsername($username) | |
|     { | |
|         return static::findOne(['username' => $username, 'status' => self::STATUS_ACTIVE]); | |
|     } | |
|  | |
|     /** | |
|      * Finds user by password reset token | |
|      * | |
|      * @param string $token password reset token | |
|      * @return static|null | |
|      */ | |
|     public static function findByPasswordResetToken($token) | |
|     { | |
|         if (!static::isPasswordResetTokenValid($token)) { | |
|             return null; | |
|         } | |
|  | |
|         return static::findOne([ | |
|             'password_reset_token' => $token, | |
|             'status' => self::STATUS_ACTIVE, | |
|         ]); | |
|     } | |
|  | |
|     /** | |
|      * Finds out if password reset token is valid | |
|      * | |
|      * @param string $token password reset token | |
|      * @return bool | |
|      */ | |
|     public static function isPasswordResetTokenValid($token) | |
|     { | |
|         if (empty($token)) { | |
|             return false; | |
|         } | |
|  | |
|         $timestamp = (int) substr($token, strrpos($token, '_') + 1); | |
|         $expire = Yii::$app->params['user.passwordResetTokenExpire']; | |
|         return $timestamp + $expire >= time(); | |
|     } | |
|  | |
|     /** | |
|      * @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 bool if password provided is valid for current user | |
|      */ | |
|     public function validatePassword($password) | |
|     { | |
|         return Yii::$app->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 = Yii::$app->security->generatePasswordHash($password); | |
|     } | |
|  | |
|     /** | |
|      * Generates "remember me" authentication key | |
|      */ | |
|     public function generateAuthKey() | |
|     { | |
|         $this->auth_key = Yii::$app->security->generateRandomString(); | |
|     } | |
|  | |
|     /** | |
|      * Generates new password reset token | |
|      */ | |
|     public function generatePasswordResetToken() | |
|     { | |
|         $this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time(); | |
|     } | |
|  | |
|     /** | |
|      * Removes password reset token | |
|      */ | |
|     public function removePasswordResetToken() | |
|     { | |
|         $this->password_reset_token = null; | |
|     } | |
| }
 | |
| 
 |