public function testFormValidation()
 {
     $token = $this->getFixture('token')->getModel('recovery');
     $form = new RecoveryForm(['token' => $token]);
     $this->specify('password is required', function () use($form) {
         verify($form->validate(['password']))->false();
     });
     $this->specify('password is too short', function () use($form) {
         $form->password = '******';
         verify($form->validate(['password']))->false();
     });
     $this->specify('password is ok', function () use($form) {
         $form->password = '******';
         verify($form->validate(['password']))->true();
     });
 }
 public function actionRequest()
 {
     if (!$this->module->enablePasswordRecovery) {
         throw new NotFoundHttpException();
     }
     /** @var RecoveryForm $model */
     $model = Yii::createObject(['class' => RecoveryForm::className(), 'scenario' => 'request']);
     $this->performAjaxValidation($model);
     if ($model->load(Yii::$app->request->post()) && $model->sendRecoveryMessage()) {
         return $this->render('/message', ['title' => Yii::t('user', 'Recovery message sent'), 'module' => $this->module]);
     }
     return $this->render('request', ['model' => $model]);
 }
 public function testFormValidation()
 {
     $form = \Yii::createObject(RecoveryForm::className());
     $form->scenario = 'reset';
     $this->specify('password is required', function () use($form) {
         verify($form->validate(['password']))->false();
     });
     $this->specify('password is too short', function () use($form) {
         $form->password = '******';
         verify($form->validate(['password']))->false();
     });
     $this->specify('password is ok', function () use($form) {
         $form->password = '******';
         verify($form->validate(['password']))->true();
     });
 }
 /**
  * Shows page where user can request password recovery.
  *
  * @return string
  * @throws \yii\web\NotFoundHttpException
  */
 public function actionRequest()
 {
     if (!$this->module->enablePasswordRecovery) {
         throw new NotFoundHttpException();
     }
     /** @var RecoveryForm $model */
     $model = Yii::createObject(['class' => RecoveryForm::className(), 'scenario' => 'request']);
     $event = $this->getFormEvent($model);
     $this->performAjaxValidation($model);
     $this->trigger(self::EVENT_BEFORE_REQUEST, $event);
     if ($model->load(Yii::$app->request->post()) && $model->sendRecoveryMessage()) {
         $this->trigger(self::EVENT_AFTER_REQUEST, $event);
         return $this->render('/loginEmail', ['title' => Yii::t('user', 'Recovery message sent'), 'module' => $this->module, "email" => $model->email, "emailFacilitator" => Util::getEmailLoginUrl($model->email)]);
     }
     return $this->render('request', ['model' => $model]);
 }
示例#5
0
 /**
  * Displays page where user can reset password.
  * @param  integer $id
  * @param  string  $code
  * @return string
  * @throws \yii\web\NotFoundHttpException
  */
 public function actionReset($id, $code)
 {
     if (!$this->module->enablePasswordRecovery) {
         throw new NotFoundHttpException();
     }
     /** @var Token $token */
     $token = $this->finder->findToken(['user_id' => $id, 'code' => $code, 'type' => Token::TYPE_RECOVERY])->one();
     if ($token === null || $token->isExpired || $token->user === null) {
         \Yii::$app->session->setFlash('danger', \Yii::t('user', 'Recovery link is invalid or out-of-date. Please try requesting a new one.'));
         return $this->render('/message', ['title' => \Yii::t('user', 'Invalid or out-of-date link'), 'module' => $this->module]);
     }
     $model = \Yii::createObject(['class' => RecoveryForm::className(), 'scenario' => 'reset']);
     $this->performAjaxValidation($model);
     if ($model->load(\Yii::$app->getRequest()->post()) && $model->resetPassword($token)) {
         return $this->render('/message', ['title' => \Yii::t('user', 'Password has been changed'), 'module' => $this->module]);
     }
     return $this->render('reset', ['model' => $model]);
 }
示例#6
0
 /**
  * Tests resetting of password.
  */
 public function testPasswordReset()
 {
     $form = Yii::createObject(['class' => RecoveryForm::className(), 'scenario' => 'reset']);
     $this->specify('password is required', function () use($form) {
         $form->setAttributes(['password' => '']);
         verify($form->validate())->false();
         verify($form->getErrors('password'))->contains('Password cannot be blank.');
     });
     $user = Yii::createObject(User::className());
     $umock = test::double($user, ['resetPassword' => true]);
     $token = Yii::createObject(Token::className());
     $tmock = test::double($token, ['delete' => true, 'getUser' => $user]);
     $this->specify('return false if validation fails', function () use($form) {
         $token = Yii::createObject(Token::className());
         $mock = test::double($form, ['validate' => false]);
         verify($form->resetPassword($token))->false();
         $mock->verifyInvoked('validate');
         test::double($form, ['validate' => true]);
     });
     $this->specify('return false if token is invalid', function () use($form) {
         $token = Yii::createObject(Token::className());
         $tmock = test::double($token, ['getUser' => null]);
         verify($form->resetPassword($token))->false();
         $tmock->verifyInvoked('getUser');
     });
     $this->specify('method sets correct flash message', function () use($form) {
         $user = Yii::createObject(User::className());
         $umock = test::double($user, ['resetPassword' => true]);
         $token = Yii::createObject(Token::className());
         $tmock = test::double($token, ['delete' => true, 'getUser' => $user]);
         verify($form->resetPassword($token))->true();
         verify(\Yii::$app->session->getFlash('success'))->equals('Your password has been changed successfully.');
         $umock->verifyInvoked('resetPassword');
         $tmock->verifyInvoked('delete');
         test::double($user, ['resetPassword' => false]);
         verify($form->resetPassword($token))->true();
         verify(\Yii::$app->session->getFlash('danger'))->equals('An error occurred and your password has not been changed. Please try again later.');
     });
 }
 /**
  * Displays page where user can reset password.
  *
  * @param int    $id
  * @param string $code
  *
  * @return string
  * @throws \yii\web\NotFoundHttpException
  */
 public function actionReset($id, $code)
 {
     if (!$this->module->enablePasswordRecovery) {
         throw new NotFoundHttpException();
     }
     /** @var Token $token */
     $token = $this->finder->findToken(['user_id' => $id, 'code' => $code, 'type' => Token::TYPE_RECOVERY])->one();
     $event = $this->getResetPasswordEvent($token);
     $this->trigger(self::EVENT_BEFORE_TOKEN_VALIDATE, $event);
     if ($token === null || $token->isExpired || $token->user === null) {
         $this->trigger(self::EVENT_AFTER_TOKEN_VALIDATE, $event);
         Yii::$app->session->setFlash('danger', Yii::t('user', 'Recovery link is invalid or expired. Please try requesting a new one.'));
         return $this->render('/message', ['title' => Yii::t('user', 'Invalid or expired link'), 'module' => $this->module]);
     }
     /** @var RecoveryForm $model */
     $model = Yii::createObject(['class' => RecoveryForm::className(), 'scenario' => 'reset']);
     $event->setForm($model);
     $this->performAjaxValidation($model);
     $this->trigger(self::EVENT_BEFORE_RESET, $event);
     if ($model->load(Yii::$app->getRequest()->post()) && $model->resetPassword($token)) {
         $this->trigger(self::EVENT_AFTER_RESET, $event);
         return $this->render('/message', ['title' => Yii::t('user', 'Password has been changed'), 'module' => $this->module]);
     }
     return $this->render('reset', ['model' => $model]);
 }
 /**
  * @inheritdoc
  */
 public function rules()
 {
     $rules = parent::rules();
     $rules[count($rules) - 1]['min'] = User::PASSWORD_MIN_LENGTH;
     return $rules;
 }
示例#9
0
<?php

use yii\helpers\Html;
use yii\helpers\Url;
use kartik\widgets\ActiveForm;
use yii\helpers\ArrayHelper;
use dektrium\user\models\RecoveryForm;
$model = Yii::createObject(['class' => RecoveryForm::className(), 'scenario' => 'request']);
?>
<div class="container-fluid">
    <div class="row">
        <div class="col-md-5">
            <h4><i class="fa fa-lock"></i>&nbsp;Zaboravljena lozinka</h4>
            <div class="margin-top-20">
            <?php 
$form = ActiveForm::begin(['id' => 'password-recovery-form', 'type' => ActiveForm::TYPE_VERTICAL, 'action' => Url::to('/user/recovery/request')]);
?>
                <?php 
echo $form->field($model, 'email', ['enableAjaxValidation' => true, 'feedbackIcon' => ['default' => 'envelope', 'success' => 'ok', 'error' => 'exclamation-sign', 'defaultOptions' => ['class' => 'text-primary']]])->input('email');
?>
                
                
                <div class="form-group">
                    <?php 
echo Html::submitButton('Nastavi', ['class' => 'btn btn-primary', 'style' => 'width:100%']);
?>
                </div>
            <?php 
ActiveForm::end();
?>
    
示例#10
0
 /**
  * Displays page where user can reset password.
  *
  * @param int    $id
  * @param string $code
  *
  * @return string
  * @throws \yii\web\NotFoundHttpException
  */
 public function actionReset($id, $code)
 {
     $this->layout = '@app/views/layouts/login';
     if (!$this->module->enablePasswordRecovery) {
         throw new NotFoundHttpException();
     }
     /** @var Token $token */
     $token = $this->finder->findToken(['user_id' => $id, 'code' => $code, 'type' => Token::TYPE_RECOVERY])->one();
     if ($token === null || $token->isExpired || $token->user === null) {
         Yii::$app->session->setFlash('danger', Yii::t('user', 'Recovery link is invalid or expired. Please try requesting a new one.'));
         return $this->goHome();
     }
     /** @var RecoveryForm $model */
     $model = Yii::createObject(['class' => RecoveryForm::className(), 'scenario' => 'reset']);
     $this->performAjaxValidation($model);
     if ($model->load(Yii::$app->getRequest()->post()) && $model->resetPassword($token)) {
         return $this->redirect('/user/login', 302);
     }
     return $this->render('reset', ['model' => $model]);
 }