diff --git a/api/logic/minecraft/auth/MojangAccount.cpp b/api/logic/minecraft/auth/MojangAccount.cpp index 2b073aac..e6247608 100644 --- a/api/logic/minecraft/auth/MojangAccount.cpp +++ b/api/logic/minecraft/auth/MojangAccount.cpp @@ -298,3 +298,9 @@ void MojangAccount::incrementUses() qWarning() << "Account" << m_username << "is now in use."; } } + +void MojangAccount::invalidateClientToken() +{ + m_clientToken = QUuid::createUuid().toString().remove(QRegExp("[{}-]")); + emit changed(); +} diff --git a/api/logic/minecraft/auth/MojangAccount.h b/api/logic/minecraft/auth/MojangAccount.h index 4902ec11..86d81c63 100644 --- a/api/logic/minecraft/auth/MojangAccount.h +++ b/api/logic/minecraft/auth/MojangAccount.h @@ -95,8 +95,8 @@ public: /* manipulation */ * Attempt to login. Empty password means we use the token. * If the attempt fails because we already are performing some task, it returns false. */ - std::shared_ptr login(AuthSessionPtr session, - QString password = QString()); + std::shared_ptr login(AuthSessionPtr session, QString password = QString()); + void invalidateClientToken(); public: /* queries */ const QString &username() const diff --git a/application/LaunchController.cpp b/application/LaunchController.cpp index 62e582d8..e8f369be 100644 --- a/application/LaunchController.cpp +++ b/application/LaunchController.cpp @@ -108,6 +108,7 @@ void LaunchController::login() auto failReasonNew = task->failReason(); if(failReasonNew == "Invalid token.") { + account->invalidateClientToken(); failReason = needLoginAgain; } else failReason = failReasonNew;