public function sendForgotEmail() { /** @var User $user */ $user = User::findOne(['email' => $this->email]); if (!$user) { throw new Exception('Não foi identificado usuário com o e-mail informado: ' . $this->email); } $user->setScenario('forgot'); if (!$user->generateToken()) { throw new Exception('Houve um erro ao tentar gerar o seu Token de acesso.'); } return Yii::$app->mailer->compose(['html' => 'layouts/reset-password'], ['token' => $user->token])->setFrom(['*****@*****.**' => Yii::$app->name])->setTo($user->email)->setSubject('Recuperação de Senha - ' . Yii::$app->name)->send(); }
/** * @return bool * @throws UserException */ public function login() { /** @var User $user */ $user = User::findOne(['email' => $this->email, 'status' => Yii::$app->params['active']]); $user->senha = $user->currentPassword; if (!$user) { throw new UserException('E-mail e/ou senha são invalidos.'); } if (!Yii::$app->getSecurity()->validatePassword($this->password, $user->senha)) { throw new UserException('E-mail e/ou senha são invalidos.'); } $identity = User::findIdentity($user->id); return Yii::$app->user->login($identity, (bool) $this->rememberMe ? 3600 * 24 * 30 : 0); }
/** * Creates data provider instance with search query applied * @param array $params * @return ActiveDataProvider */ public function search(array $params) { if (empty($params['status'])) { $this->status = ''; } /** @var Query $query */ $query = User::find(); $dataProvider = new ActiveDataProvider(['query' => $query, 'sort' => ['defaultOrder' => ['name' => SORT_ASC]], 'pagination' => ['pageSize' => Yii::$app->params['pagination']['pageSize']]]); $this->load($params); if (!$this->validate()) { return $dataProvider; } $query->andFilterWhere(['id' => $this->id]); $query->andFilterWhere(['group_id' => $this->group_id]); $query->andFilterWhere(['status' => $this->status]); $query->andFilterWhere(['like', 'name', $this->name]); $query->andFilterWhere(['like', 'email', $this->email]); return $dataProvider; }
/** * @return \yii\db\ActiveQuery */ public function getCreatedBy() { return $this->hasOne(User::className(), ['id' => 'created_by']); }
public function actionRenewPassword($token) { $this->controllerDescription = 'Alterar senha de Acesso'; try { if (empty($token) || is_null($token)) { throw new Exception('Não foi informado o seu token de alteração de senha.'); } /** @var User $user */ $user = User::findOne(['token' => $token]); if (!$user) { throw new Exception('O Token informado é inválido e/ou está fora de validade.'); } $form = new RenewPasswordForm(); if ($form->load($this->getPost()) && $form->validate()) { $form->generateNewPassword($user); $this->getSession()->setFlash('success', 'Sua senha de acesso foi alterada com sucesso! Entre no sistema com sua nova senha.'); return $this->redirect(Yii::$app->user->loginUrl); } return $this->render('renew-password', ['formModel' => $form]); } catch (Exception $e) { $this->getSession()->setFlash('warning', $e->getMessage()); return $this->redirect(['forgot']); } }
/** * Metodo que faz a alteracao da senha de acesso de um determinado usuario * @param User $user * @return bool * @throws \yii\base\Exception */ public function generateNewPassword(User $user) { $user->senha = Yii::$app->getSecurity()->generatePasswordHash($this->password); $user->token = null; return $user->save(); }