MediaWiki clientlogin не будет принимать логин - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь использовать действие clientlogin для API MediaWiki, как показано ниже.

Когда я пытаюсь сделать запрос, как API говорит

/ wiki / api. php? Action = clientlogin & format = json & logintoken = {token} & username = {username} & пароль = {пароль}

Я получаю сообщение об ошибке, что logintoken должен быть в теле запроса. Это привело меня к результирующему коду ниже, но теперь возвращает ошибку, что logintoken должен быть установлен. Любая подсказка, почему это так?

Примечание: Я получил имя пользователя и пароль в другой функции, которая передается через карту входных данных.

async function requestLogin(loginToken: string, inputs: {[key:string]: string}) {

    let loginRequest: string = "?action=clientlogin&format=json";
    let loginData: {[key:string]: string} = {
        'logintoken': loginToken
    };
    for (let key in inputs) {
        // place the key/value into the request
        loginData[key] = inputs[key];
    }

    console.log(loginData);
    const login = bent(state.url, 'POST', 'json');
    let loginResponse = await login(loginRequest, loginData);
    if ("error" in loginResponse) {
        console.log(loginResponse["error"]);
        console.log(loginResponse["error"]["info"]);
    } else {
        // Successfully logged in :)
        console.log(loginResponse);
    }
}

1 Ответ

0 голосов
/ 29 февраля 2020

Похоже, вы посылаете тело как JSON. Устаревший API MediaWiki принимает данные в формате application/x-www-form-urlencoded или multipart/form-data. (Т.е. самый простой способ - просто переместить строку запроса из URL в тело.) Существует REST API, который принимает JSON ввод, но он новый, плохо документирован и предлагает только ограниченный набор функций на данный момент.

Кроме того, вы уверены, что вам нужно action=clientlogin? Это API, предназначенный для создания интерактивного интерфейса входа в систему на стороне клиента; это не работает так, как люди склонны предполагать. action=login, вероятно, лучшая альтернатива.

...