mirror of
https://github.com/elyby/accounts.git
synced 2024-12-26 07:09:46 +05:30
Токен, выписанный на сессию без запоминания должен истекать дольше времени
This commit is contained in:
parent
ae3c3b88de
commit
e756dbacd6
@ -63,6 +63,9 @@ class Component extends YiiUserComponent {
|
||||
$token->addClaim(new SessionIdClaim($session->id));
|
||||
} else {
|
||||
$session = null;
|
||||
// Если мы не сохраняем сессию, то токен должен жить подольше, чтобы
|
||||
// не прогорала сессия во время работы с аккаунтом
|
||||
$token->addClaim(new Claim\Expiration(time() + 60 * 60 * 24 * 7));
|
||||
}
|
||||
|
||||
$jwt = $this->serializeToken($token);
|
||||
|
@ -78,10 +78,7 @@ class LoginForm extends ApiForm {
|
||||
$account->save();
|
||||
}
|
||||
|
||||
/** @var \api\components\User\Component $component */
|
||||
$component = Yii::$app->user;
|
||||
|
||||
return $component->login($account, $this->rememberMe);
|
||||
return Yii::$app->user->login($account, $this->rememberMe);
|
||||
}
|
||||
|
||||
protected function getAccountClassName() {
|
||||
|
@ -9,6 +9,7 @@ use Codeception\Specify;
|
||||
use common\models\AccountSession;
|
||||
use Emarref\Jwt\Algorithm\AlgorithmInterface;
|
||||
use Emarref\Jwt\Claim\ClaimInterface;
|
||||
use Emarref\Jwt\Claim\Expiration;
|
||||
use Emarref\Jwt\Token;
|
||||
use tests\codeception\api\unit\DbTestCase;
|
||||
use tests\codeception\common\_support\ProtectedCaller;
|
||||
@ -50,8 +51,13 @@ class ComponentTest extends DbTestCase {
|
||||
$result = $this->component->login($account, false);
|
||||
expect($result)->isInstanceOf(LoginResult::class);
|
||||
expect($result->getSession())->null();
|
||||
expect(is_string($result->getJwt()))->true();
|
||||
expect($result->getIdentity())->equals($account);
|
||||
$jwt = $result->getJwt();
|
||||
expect(is_string($jwt))->true();
|
||||
$token = $this->component->parseToken($jwt);
|
||||
$claim = $token->getPayload()->findClaimByName(Expiration::NAME);
|
||||
// Токен выписывается на 7 дней, но мы проверим хотя бы на 2 суток
|
||||
expect($claim->getValue())->greaterThan(time() + 60 * 60 * 24 * 2);
|
||||
});
|
||||
|
||||
$this->specify('success get LoginResult object with session value if rememberMe is true', function() {
|
||||
@ -60,9 +66,14 @@ class ComponentTest extends DbTestCase {
|
||||
$result = $this->component->login($account, true);
|
||||
expect($result)->isInstanceOf(LoginResult::class);
|
||||
expect($result->getSession())->isInstanceOf(AccountSession::class);
|
||||
expect(is_string($result->getJwt()))->true();
|
||||
expect($result->getIdentity())->equals($account);
|
||||
expect($result->getSession()->refresh())->true();
|
||||
$jwt = $result->getJwt();
|
||||
expect(is_string($jwt))->true();
|
||||
$token = $this->component->parseToken($jwt);
|
||||
$claim = $token->getPayload()->findClaimByName(Expiration::NAME);
|
||||
// Токен выписывается на 1 час, т.к. в дальнейшем он будет рефрешиться
|
||||
expect($claim->getValue())->lessOrEquals(time() + 3600);
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user