API:Создание учётной записи

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page API:Account creation and the translation is 98% complete.

Other languages:
Deutsch • ‎English • ‎Türkçe • ‎dansk • ‎español • ‎français • ‎italiano • ‎polski • ‎português • ‎română • ‎русский • ‎العربية • ‎ไทย • ‎中文 • ‎日本語 • ‎한국어
Версия MediaWiki: 1.27
Эта страница документирует API создания учётной записи начиная с MediaWiki 1.27. Документация API, существовавшая в более ранних версиях, доступна здесь: Api:Account creation/pre-1.27 .

Contents

Документация API


action=createaccount (create)

(main | createaccount)
  • This module requires write rights.
  • This module only accepts POST requests.
  • Source: MediaWiki
  • License: GPL-2.0-or-later

Create a new user account.

The general procedure to use this module is:

  1. Fetch the fields available from action=query&meta=authmanagerinfo with amirequestsfor=create, and a createaccount token from action=query&meta=tokens.
  2. Present the fields to the user, and obtain their submission.
  3. Post to this module, supplying createreturnurl and any relevant fields.
  4. Check the status in the response.
    • If you received PASS or FAIL, you're done. The operation either succeeded or it didn't.
    • If you received UI, present the new fields to the user and obtain their submission. Then post to this module with createcontinue and the relevant fields set, and repeat step 4.
    • If you received REDIRECT, direct the user to the redirecttarget and wait for the return to createreturnurl. Then post to this module with createcontinue and any fields passed to the return URL, and repeat step 4.
    • If you received RESTART, that means the authentication worked but we don't have a linked user account. You might treat this as UI or as FAIL.
Parameters:
createrequests

Only use these authentication requests, by the id returned from action=query&meta=authmanagerinfo with amirequestsfor=create or from a previous response from this module.

Separate values with | or alternative. Maximum number of values is 50 (500 for bots).
createmessageformat

Format to use for returning messages.

One of the following values: html, wikitext, raw, none
Default: wikitext
createmergerequestfields

Merge field information for all authentication requests into one array.

Type: boolean (details)
createpreservestate

Preserve state from a previous failed login attempt, if possible.

If action=query&meta=authmanagerinfo returned true for hasprimarypreservedstate, requests marked as primary-required should be omitted. If it returned a non-empty value for preservedusername, that username must be used for the username parameter.

Type: boolean (details)
createreturnurl

Return URL for third-party authentication flows, must be absolute. Either this or createcontinue is required.

Upon receiving a REDIRECT response, you will typically open a browser or web view to the specified redirecttarget URL for a third-party authentication flow. When that completes, the third party will send the browser or web view to this URL. You should extract any query or POST parameters from the URL and pass them as a createcontinue request to this API module.

createcontinue

This request is a continuation after an earlier UI or REDIRECT response. Either this or createreturnurl is required.

Type: boolean (details)
createtoken

A "createaccount" token retrieved from action=query&meta=tokens

This parameter is required.
*
This module accepts additional parameters depending on the available authentication requests. Use action=query&meta=authmanagerinfo with amirequestsfor=create (or a previous response from this module, if applicable) to determine the requests available and the fields that they use.

Создание учётной записи

Процесс состоит из трёх основных этапов:

  1. Получить поля из API:Authmanagerinfo и токен из API:Токены .
  2. Отправить POST-запрос с полученным токеном, сообщающий информацию о токене и другие поля, и вернуть URL в API.
  3. Обработать ответ, который может включать запрос на дополнительные POST-запросы для предоставления дополнительной информации.

Пример 1: Процесс в вики без специальных расширений аутентификации

Вики без специальных расширений аутентификации могут быть довольно несложными. Если ваш код знает, какие поля будут обязательными, он может пропустить вызов API:Authmanagerinfo и просто предположить, какие поля будут необходимы (например имя пользователя, пароль & повторно введенный пароль, email, возможно реальное имя).

Если вы создаете учетную запись для кого-то другого, вам нужно будет указать причину этого, включив параметр reason в запрос POST. Вы также можете использовать mailpassword вместо параметров password и retype, чтобы MediaWiki отправил новому пользователю временный пароль по электронной почте.

POST-запрос

Ответ

{
    "createaccount": {
        "status": "PASS",
        "username": "Zane"
    }
}

Пример кода

Python

#!/usr/bin/python3

"""
    create_account.py

    MediaWiki API Demos
    Demo of `createaccount` module: Create an account on a wiki without the
    special authentication extensions

    MIT license
"""

import requests

S = requests.Session()

WIKI_URL = "http://dev.wiki.local.wmftest.net:8080"
API_ENDPOINT = WIKI_URL + "/w/api.php"

# First step
# Retrieve account creation token from `tokens` module

PARAMS_0 = {
    'action':"query",
    'meta':"tokens",
    'type':"createaccount",
    'format':"json"
}

R = S.get(url=API_ENDPOINT, params=PARAMS_0)
DATA = R.json()

TOKEN = DATA['query']['tokens']['createaccounttoken']

# Second step
# Send a post request with the fetched token and other data (user information,
# return URL, etc.)  to the API to create an account

PARAMS_1 = {
    'action': "createaccount",
    'createtoken': TOKEN,
    'username': 'your_username',
    'password': 'your_password',
    'retype': 'retype_your_password',
    'createreturnurl': WIKI_URL,
    'format': "json"
}

R = S.post(API_ENDPOINT, data=PARAMS_1)
DATA = R.json()

print(DATA)

PHP

<?php

/*
    create_account.php

    MediaWiki API Demos
    Demo of `createaccount` module: Create an account on a wiki without the
    special authentication extensions
    MIT license
*/

$wikiUrl = "http://dev.wiki.local.wmftest.net:8080";
$endPoint = $wikiUrl . "/w/api.php";

$createAccount_Token = getCreateAccountToken(); // Step 1
createAccount( $createAccount_Token ); // Step 2

// Step 1: GET Request to fetch createaccount token
function getCreateAccountToken() {
	global $endPoint;

	$params1 = [
		"action" => "query",
		"meta" => "tokens",
		"type" => "createaccount",
		"format" => "json"
	];

	$url = $endPoint . "?" . http_build_query( $params1 );

	$ch = curl_init( $url );
	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
	curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" );
	curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" );

	$output = curl_exec( $ch );
	curl_close( $ch );

	$result = json_decode( $output, true );
	return $result["query"]["tokens"]["createaccounttoken"];
}

// Step 2: POST Request with the fetched token and other data (user information,
// return URL, etc.)  to the API to create an account
function createAccount( $createAccount_Token ) {
	global $endPoint, $wikiUrl;

	$params2 = [
		"action" => "createaccount",
		"createtoken" => $createAccount_Token,
		"username" => "your_username",
		"password" => "your_password",
		"retype" => "retype_your_password",
		"createreturnurl" => $wikiUrl,
		"format" => "json"
	];

	$ch = curl_init();

	curl_setopt( $ch, CURLOPT_URL, $endPoint );
	curl_setopt( $ch, CURLOPT_POST, true );
	curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $params2 ) );
	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
	curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" );
	curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" );

	$output = curl_exec( $ch );
	curl_close( $ch );

	echo( $output );
}

JavaScript

/*  
    create_account.js
 
    MediaWiki API Demos
    Demo of `createaccount` module: Create an account on a wiki without the
    special authentication extensions

    MIT license
*/

var request = require('request').defaults({jar: true}),
    wikiUrl = "http://dev.wiki.local.wmftest.net:8080",
    endPoint = wikiUrl + "/w/api.php";

// Step 1: GET Request to fetch createaccount token
function getCreateAccountToken() {
    var params_0 = {
        action: "query",
        meta: "tokens",
        type: "createaccount",
        format: "json"
    };

    request.get({ url: endPoint, qs: params_0 }, function (error, res, body) {
        if (error) {
            return;
        }
        var data = JSON.parse(body);
        createaccount(data.query.tokens.createaccounttoken);
    });
}

// Step 2: POST Request with the fetched token and other data (user information,
// return URL, etc.)  to the API to create an account
function createaccount(createaccount_token) {
    var params_1 = {
        action: "createaccount",
        username: "your_username",
        password: "your_password",
        retype: "retype_your_password",
        createreturnurl: wikiUrl,
        createtoken: createaccount_token,
        format: "json"
    };

    request.post({ url: endPoint, form: params_1 }, function (error, res, body) {
        if (error) {
            return;
        }
        console.log(body);
    });
}

// Start From Step 1
getCreateAccountToken();

MediaWiki JS

/*
	create_account.js

	MediaWiki API Demos
    Demo of `createaccount` module: Create an account on a wiki without the
    special authentication extensions

	MIT License
*/

var params = {
		action: 'query',
		meta: 'tokens',
		type: 'createaccount',
		format: 'json'
	},
	api = new mw.Api();

api.get( params ).done( function ( data ) {
	var token = data.query.tokens.createaccounttoken,
		params1 = {
			action: 'createaccount',
			username: 'your_username',
			password: 'your_password',
			retype: 'retype_your_password',
			createreturnurl: 'http:' + mw.config.get( 'wgServer' ),
			createtoken: token,
			format: 'json'
		};

	api.post( params1 ).done( function ( data ) {
		console.log( data );
	} );
} );


Пример 2: Процесс в вики с расширением CAPTCHA

Обратите внимание, что первый шаг, приведенный ниже, может быть выполнен в виде двух шагов: один для извлечения доступных полей из API:Authmanagerinfo , а другой для извлечения токена из API:Токены .

Первый шаг: Извлеките доступные поля из API:Authmanagerinfo и токена из API:Токены

Второй шаг: Отправьте POST-запрос вместе с токеном создания учетной записи, информацией о пользователе и обратным URL

Пример кода

Обратите внимание, что этот пример кода разделяет запросы на API:Authmanagerinfo и API:Токены и предполагает наличие CAPTCHA и отсутствие других сложностей.

Пример 3: Создание учетной записи в вики с включенным CAPTCHA, расширением OpenID и расширением двухфакторной аутентификации

Первый шаг: Извлеките доступные поля из API:Authmanagerinfo и токен из API:Токены

Выборка из API:Authmanagerinfo и API:Токены в основном такая же, как в предыдущем примере, и поэтому здесь не повторяется. Список запросов, возвращённых API:Authmanagerinfo , будет включать определения как для расширения CAPTCHA, так и для расширения OpenID.

Второй шаг: Ответьте на CAPTCHA и выберите аутентификацию OpenID.

От клиента следует ожидать, что он перенаправит браузер пользователя на предоставленную в параметре redirecttarget цель перенаправления.

Провайдер OpenID произведёт аутентификацию и перенаправит на страницу вики Special:OpenIDConnectReturn, которая произведёт валидацию ответа OpenID и перенаправит на цель createreturnurl, предоставленную в первом POST-запросе к API, с добавленными параметрами code и state.

В этот момент клиент получает управление процессом обратно и производит свой следующий запрос API.

Третий шаг: Вернитесь из OpenID.

Клиент отправляет code и state обратно в API. Ответ API имеет расширение для двухфакторной аутентификации, предлагающее пользователю установить второй фактор.

Теперь клиенту следует указать призвать пользователя к созданию новой учётной записи в своём приложении для двухфакторной аутентификации и введению текущего кода, или же позволить пользователю пропустить настройку двухфакторной аутентификации. Предположим, что пользователь всё-таки настроил ДФА.

Четвёртый шаг: Настройте двухфакторную аутентификацию.

Создание учётной записи наконец-то завершено.

Если в каком-либо месте произойдёт ошибка создания учётной записи, будет возвращён ответ со статусом FAIL, также будет указано сообщение message, которое следует показать пользователю.

Возможные ошибки

Код Информация
badtoken Неверный токен создания учетной записи
notoken Параметр token должен быть задан.
mustpostparams Следующий параметр был найден в строке запроса, но должен находиться в теле POST: createtoken.
missingparam Как минимум один из параметров "createcontinue" и "createreturnurl" обязателен.
authmanager-create-no-primary Предоставленные учётные данные не могут быть использованы для создания учётной записи.
invalidemailaddress Адрес электронной почты не может быть принят, так как он не соответствует формату.

Пожалуйста, введите корректный адрес или оставьте поле пустым.

badretype Введённые вами пароли не совпадают.
userexists Введённое имя участника уже используется.

Пожалуйста, выберите другое имя.

captcha-createaccount-fail Контрольная комбинация неверна или не введена.
acct_creation_throttle_hit Посетители этой вики, использующие ваш IP-адрес, создали num аккаунтов за последний день, что является максимумом за этот промежуток времени.

В результате, посетители с этого IP-адреса больше не могут создавать аккаунты в данный момент.

Если вы находитесь на мероприятии, фокусирующемся на вкладе в проекты Викимедиа, пожалуйста, посмотрите Запрос на временное увеличение предела IP для помощи в решении этой проблемы.

Дополнительная информация

Если вы уже вошли на сайт, при создании новой учётной записи будет в журнал будет записано и ваше текущее имя учётной записи.

  • При выполнении фрагментов кода, представленных на этой странице, помните:
    • После создания учетной записи в вики, ее нельзя удалить.
    • Always use https://test.wikipedia.org/w/api.php as the endpoint, so that you don't accidentally create accounts on production wikis.
  • Администраторы сайта и разработчики расширений MediaWiki могут отключить эту функцию API, вставив следующую строку в файл конфигурации:
$wgAPIModules['createaccount'] = 'ApiDisabled';


См. также