TimestampBehavior::class, 'updatedAtAttribute' => false, ], ]; } public function getClient(): ActiveQuery { return $this->hasOne(OauthClient::class, ['id' => 'client_id']); } public function getAccount(): ActiveQuery { return $this->hasOne(Account::class, ['id' => 'owner_id']); } public function getScopes(): Set { return new Set(static::getDb()->getSchema()->getRawTableName(static::tableName()), $this->id, 'scopes'); } public function getAccessTokens() { throw new NotSupportedException('This method is possible, but not implemented'); } public function beforeDelete(): bool { if (!$result = parent::beforeDelete()) { return $result; } $this->clearScopes(); $this->removeRefreshToken(); return true; } public function removeRefreshToken(): void { /** @var \api\components\OAuth2\Repositories\RefreshTokenStorage $refreshTokensStorage */ // TODO: rework $refreshTokensStorage = Yii::$app->oauth->getRefreshTokenStorage(); $refreshTokensSet = $refreshTokensStorage->sessionHash($this->id); foreach ($refreshTokensSet->members() as $refreshTokenId) { $refreshTokensStorage->delete($refreshTokensStorage->get($refreshTokenId)); } $refreshTokensSet->delete(); } public function clearScopes(): void { $this->getScopes()->delete(); } }