authenticate function
Authenticates a user with given credentials username and password.
This only works with Mojang accounts and does not work with
migrated Microsoft accounts.
clientToken should be identical for each request, otherwise old
access tokens will be invalidated. If omitted, a randomly generated
version 4 UUID will be used.
Implementation
Future<MojangAccount> authenticate(String username, String password,
{String? clientToken}) async {
final payload = {
'agent': {'name': 'Minecraft', 'version ': 1},
'username': username,
'password': password,
'clientToken': clientToken ?? Uuid().v4(),
'requestUser': true
};
final response = await requestBody(
http.post, _authServerApi, 'authenticate', payload,
headers: {'content-type': 'application/json'});
final data = parseResponseMap(response);
if (data['error'] != null) {
if (response.statusCode == 403) {
throw AuthException(data['errorMessage']);
} else if (response.statusCode == 400) {
throw ArgumentError('Invalid username, password or client token.');
} else if (data['error'] == 'GoneException') {
// The account was migrated to a Microsoft account.
throw Exception('The account has been migrated to a Microsoft account.');
} else {
throw Exception(data['errorMessage']);
}
}
return MojangAccount.fromJson(data);
}