diff options
-rw-r--r-- | api/logic/minecraft/auth/MojangAccount.cpp | 6 | ||||
-rw-r--r-- | api/logic/minecraft/auth/MojangAccount.h | 4 | ||||
-rw-r--r-- | application/LaunchController.cpp | 1 |
3 files changed, 9 insertions, 2 deletions
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<YggdrasilTask> login(AuthSessionPtr session, - QString password = QString()); + std::shared_ptr<YggdrasilTask> 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; |