/** * Sends recovery message. * * @return bool */ public function sendRecoveryMessage() { if ($this->validate()) { $this->_user->sendRecoveryMessage(); return true; } return false; }
/** * Resets user's password. * * @return bool */ public function resetPassword() { if ($this->validate()) { $this->_user->resetPassword($this->password); return true; } return false; }
/** * @param $params * @return ActiveDataProvider */ public function search($params) { $query = User::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); if (!($this->load($params) && $this->validate())) { return $dataProvider; } $this->addCondition($query, 'username', true); $this->addCondition($query, 'email', true); $this->addCondition($query, 'created_at'); $this->addCondition($query, 'registered_from'); return $dataProvider; }
public function testRecoverable() { $this->user = User::findOne(1); $this->user->sendRecoveryMessage(); $this->specify('correct user confirmation url should be returned', function () { $needle = \Yii::$app->getUrlManager()->createAbsoluteUrl(['/user/recovery/reset', 'id' => $this->user->id, 'token' => $this->user->recovery_token]); verify($this->user->getRecoveryUrl())->contains($needle); }); $this->specify('confirmation token should become invalid after specified time', function () { \Yii::$app->getModule('user')->recoverWithin = $expirationTime = 86400; $user = new User(['recovery_token' => 'NNWJf_CoV8ocX3AsYK38CoOGkXUcpQK4', 'recovery_sent_at' => time()]); verify($user->getIsRecoveryPeriodExpired())->false(); $user = new User(['recovery_token' => 'NNWJf_CoV8ocX3AsYK38CoOGkXUcpQK4', 'recovery_sent_at' => time() - $expirationTime - 1]); verify($user->getIsRecoveryPeriodExpired())->true(); }); }
use hipstercreative\user\tests\_pages\LoginPage; use yii\helpers\Html; use yii\helpers\Url; use hipstercreative\user\models\User; $I = new TestGuy($scenario); $I->wantTo('ensure that password recovery works'); $page = RecoveryPage::openBy($I); $I->amGoingTo('try to request recovery token for unconfirmed account'); $user = $I->getFixture('user')->getModel('unconfirmed'); $page->recover($user->email); $I->see('You need to confirm your email address'); $I->amGoingTo('try to request recovery token'); $user = $I->getFixture('user')->getModel('user'); $page->recover($user->email); $I->see('You have been sent an email with instructions on how to reset your password.'); $user = $I->grabRecord(User::className(), ['email' => $user->email]); $I->seeInEmail(Html::encode($user->getRecoveryUrl())); $I->seeInEmailRecipients($user->email); $I->amGoingTo('reset password with invalid token'); $user = $I->getFixture('user')->getModel('user_with_expired_recovery_token'); $I->amOnPage(Url::toRoute(['/user/recovery/reset', 'id' => $user->id, 'token' => $user->recovery_token])); $I->see('Recovery token is invalid'); $I->amGoingTo('reset password'); $user = $I->getFixture('user')->getModel('user_with_recovery_token'); $I->amOnPage(Url::toRoute(['/user/recovery/reset', 'id' => $user->id, 'token' => $user->recovery_token])); $I->fillField('#recovery-form-password', 'newpass'); $I->click('Finish'); $I->see('Password recovery finished'); $page = LoginPage::openBy($I); $page->login($user->email, 'qwerty'); $I->see('Invalid login or password');
<?php use hipstercreative\user\tests\_pages\ResendPage; use hipstercreative\user\models\User; $I = new TestGuy($scenario); $I->wantTo('ensure that resending of confirmation tokens works'); $page = ResendPage::openBy($I); $I->amGoingTo('try to resend token to non-existent user'); $page->resend('*****@*****.**'); $I->see('Email is invalid'); $I->amGoingTo('try to resend token to already confirmed user'); $user = $I->getFixture('user')->getModel('user'); $page->resend($user->email); $I->see('This account has already been confirmed'); $I->amGoingTo('try to resend token to unconfirmed user'); $user = $I->getFixture('user')->getModel('unconfirmed'); $I->seeRecord(User::className(), ['confirmation_token' => $user->confirmation_token]); $page->resend($user->email); $I->see('Awesome, almost there! We need to confirm your email address'); $I->dontSeeRecord(User::className(), ['confirmation_token' => $user->confirmation_token]);
use hipstercreative\user\tests\_pages\LoginPage; use hipstercreative\user\models\User; use yii\helpers\Html; $I = new TestGuy($scenario); $I->wantTo('ensure that email settings works'); $loginPage = LoginPage::openBy($I); $user = $I->getFixture('user')->getModel('user'); $loginPage->login($user->email, 'qwerty'); $I->amGoingTo('update email'); $page = EmailSettingsPage::openBy($I); $page->updateEmail('wrong', '*****@*****.**'); $I->see('Current password is not valid'); $page->updateEmail('qwerty', '*****@*****.**'); $I->see('Before your email will be changed we need you to confirm your new email address'); $I->seeRecord(User::className(), ['id' => $user->id, 'email' => '*****@*****.**', 'unconfirmed_email' => '*****@*****.**']); $user = $I->grabRecord(User::className(), ['id' => $user->id]); $I->seeInEmail(Html::encode($user->getConfirmationUrl())); $I->seeInEmailRecipients($user->unconfirmed_email); Yii::$app->getUser()->logout(); $I->amGoingTo('login with new email'); $loginPage = LoginPage::openBy($I); $loginPage->login('*****@*****.**', 'qwerty'); $I->see('Invalid login or password'); $user->confirm(false); $loginPage = LoginPage::openBy($I); $loginPage->login('*****@*****.**', 'qwerty'); $I->see('Invalid login or password'); $loginPage->login('*****@*****.**', 'qwerty'); $I->see('Logout'); $I->seeRecord(User::className(), ['id' => 1, 'email' => '*****@*****.**', 'unconfirmed_email' => null]);
<?php use yii\helpers\Url; use hipstercreative\user\models\User; $I = new TestGuy($scenario); $I->wantTo('ensure that confirmation works'); $I->amGoingTo('check that error is showed when token expired'); $user = $I->getFixture('user')->getModel('unconfirmed_with_expired_token'); $I->amOnPage(Url::toRoute(['/user/registration/confirm', 'id' => $user->id, 'token' => $user->confirmation_token])); $I->see('Confirmation token is invalid'); $I->amGoingTo('check that user get confirmed'); $user = $I->getFixture('user')->getModel('unconfirmed'); $I->amOnPage(Url::toRoute(['/user/registration/confirm', 'id' => $user->id, 'token' => $user->confirmation_token])); $I->see('Your account has been confirmed'); $I->seeRecord(User::className(), ['id' => $user->id, 'confirmation_token' => null, 'confirmation_sent_at' => null]);
<?php use hipstercreative\user\tests\_pages\RegisterPage; use yii\helpers\Html; use hipstercreative\user\models\User; $I = new TestGuy($scenario); $I->wantTo('ensure that registration works'); $page = RegisterPage::openBy($I); $I->amGoingTo('try to register with empty credentials'); $page->register('', '', ''); $I->see('Username cannot be blank'); $I->see('Email cannot be blank'); $I->see('Password cannot be blank'); $I->amGoingTo('try to register with already used email and username'); $page->register('user', '*****@*****.**', 'qwerty'); $I->see(Html::encode('Username "user" has already been taken')); $I->see(Html::encode('Email "*****@*****.**" has already been taken')); $I->amGoingTo('try to register with enabled confirmation'); $page->register('tester', '*****@*****.**', 'tester'); $I->see('Awesome, almost there! We need to confirm your email address'); $user = $I->grabRecord(User::className(), ['email' => '*****@*****.**']); $I->seeInEmail(Html::encode($user->getConfirmationUrl()));