getIsGuest()) { return null; } /** @var IdentityInterface $identity */ $identity = $this->getIdentity(); if (!$identity instanceof JwtIdentity) { return null; } /** @var int|null $sessionId */ $sessionId = $identity->getToken()->claims()->get('jti'); if ($sessionId === null) { return null; } return AccountSession::findOne(['id' => (int)$sessionId]); } public function terminateSessions(Account $account, int $mode = 0): void { $currentSession = null; if ($mode & self::KEEP_CURRENT_SESSION) { $currentSession = $this->getActiveSession(); } if (!($mode & self::KEEP_SITE_SESSIONS)) { foreach ($account->sessions as $session) { if ($currentSession === null || $currentSession->id !== $session->id) { $session->delete(); } } } if (!($mode & self::KEEP_MINECRAFT_SESSIONS)) { /** @var \common\models\OauthSession|null $minecraftSession */ $minecraftSession = $account->getOauthSessions() ->andWhere(['client_id' => OauthClient::UNAUTHORIZED_MINECRAFT_GAME_LAUNCHER]) ->one(); if ($minecraftSession !== null) { $minecraftSession->revoked_at = time(); Assert::true($minecraftSession->save()); } } } }