CINXE.COM

Trust and Safety Product/Temporary Accounts/For developers - MediaWiki

<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-disabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Trust and Safety Product/Temporary Accounts/For developers - MediaWiki</title> <script>(function(){var className="client-js vector-feature-language-in-header-disabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )mediawikiwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""], "wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"0d1f5ae0-d629-4319-8e40-052b0840d675","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Trust_and_Safety_Product/Temporary_Accounts/For_developers","wgTitle":"Trust and Safety Product/Temporary Accounts/For developers","wgCurRevisionId":6864184,"wgRevisionId":6864184,"wgArticleId":1791658,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Temporary Accounts"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Trust_and_Safety_Product/Temporary_Accounts/For_developers","wgRelevantArticleId":1791658,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"mediawiki", "wgCiteReferencePreviewsActive":true,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":30000,"wgTranslatePageTranslation":"source","wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgDiscussionToolsFeaturesEnabled":{"replytool":true,"newtopictool":true,"sourcemodetoolbar":true,"topicsubscription":false,"autotopicsub":false,"visualenhancements":false,"visualenhancements_reply":false,"visualenhancements_pageframe":false},"wgDiscussionToolsFallbackEditMode":"visual","wgULSPosition":"personal","wgULSisCompactLinksEnabled":true,"wgVector2022LanguageInHeader":false,"wgULSisLanguageSelectorEmpty":false,"wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile", "model","platform","platformVersion"]};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.translate.tag.languages":"ready","ext.pygments":"ready","ext.discussionTools.init.styles":"ready","oojs-ui-core.styles":"ready","oojs-ui.styles.indicators":"ready","mediawiki.widgets.styles":"ready","oojs-ui-core.icons":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.translate.edit.documentation.styles":"ready","ext.translate":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.pt":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.pygments.view","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.translate.pagetranslation.uls", "ext.urlShortener.toolbar","ext.centralauth.centralautologin","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.discussionTools.init","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.compactlinks","ext.uls.interface","ext.checkUser.clientHints"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=ext.discussionTools.init.styles%7Cext.pygments%2Ctranslate%2CwikimediaBadges%7Cext.translate.edit.documentation.styles%7Cext.translate.tag.languages%7Cext.uls.pt%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&amp;only=styles&amp;skin=vector-2022"> <script async="" src="/w/load.php?lang=en&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=site.styles&amp;only=styles&amp;skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:site_name" content="MediaWiki"> <meta property="og:title" content="Trust and Safety Product/Temporary Accounts/For developers - MediaWiki"> <meta property="og:type" content="website"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//m.mediawiki.org/wiki/Trust_and_Safety_Product/Temporary_Accounts/For_developers"> <link rel="alternate" type="application/x-wiki" title="Edit" href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/mediawiki.png"> <link rel="icon" href="/static/favicon/mediawiki.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="MediaWiki (en)"> <link rel="EditURI" type="application/rsd+xml" href="//www.mediawiki.org/w/api.php?action=rsd"> <link rel="canonical" href="https://www.mediawiki.org/wiki/Trust_and_Safety_Product/Temporary_Accounts/For_developers"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"> <link rel="alternate" type="application/atom+xml" title="MediaWiki Atom feed" href="/w/index.php?title=Special:RecentChanges&amp;feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="ext-discussiontools-replytool-enabled ext-discussiontools-newtopictool-enabled ext-discussiontools-sourcemodetoolbar-enabled skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Trust_and_Safety_Product_Temporary_Accounts_For_developers rootpage-Trust_and_Safety_Product skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/MediaWiki" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-mw-download" class="mw-list-item"><a href="/wiki/Download"><span>Get MediaWiki</span></a></li><li id="n-mw-extensions" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Category:Extensions"><span>Get extensions</span></a></li><li id="n-blog-text" class="mw-list-item"><a href="https://techblog.wikimedia.org/"><span>Tech blog</span></a></li><li id="n-mw-contribute" class="mw-list-item"><a href="/wiki/Special:MyLanguage/How_to_contribute"><span>Contribute</span></a></li> </ul> </div> </div> <div id="p-support" class="vector-menu mw-portlet mw-portlet-support" > <div class="vector-menu-heading"> Support </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Help:Contents" title="The place to find out"><span>User help</span></a></li><li id="n-mw-faq" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Manual:FAQ"><span>FAQ</span></a></li><li id="n-mw-manual" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Manual:Contents"><span>Technical manual</span></a></li><li id="n-mw-supportdesk" class="mw-list-item"><a href="/wiki/Project:Support_desk"><span>Support desk</span></a></li><li id="n-mw-communication" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Communication"><span>Communication</span></a></li> </ul> </div> </div> <div id="p-development" class="vector-menu mw-portlet mw-portlet-development" > <div class="vector-menu-heading"> Development </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mw-developerportal" class="mw-list-item"><a href="https://developer.wikimedia.org/"><span>Developer portal</span></a></li><li id="n-svn-statistics" class="mw-list-item"><a href="/wiki/Development_statistics"><span>Code statistics</span></a></li> </ul> </div> </div> <div id="p-mediawiki.org" class="vector-menu mw-portlet mw-portlet-mediawiki_org" > <div class="vector-menu-heading"> mediawiki.org </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-portal" class="mw-list-item"><a href="/wiki/Project:Help" title="About the project, what you can do, where to find things"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-mw-translate" class="mw-list-item"><a href="/wiki/Special:LanguageStats"><span>Translate content</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Load a random page [x]" accesskey="x"><span>Random page</span></a></li><li id="n-mw-discussion" class="mw-list-item"><a href="/wiki/Project:Village_Pump"><span>Village pump</span></a></li><li id="n-Sandboxlink-portlet-label" class="mw-list-item"><a href="/wiki/Project:Sandbox"><span>Sandbox</span></a></li> </ul> </div> </div> <div id="p-lang" class="vector-menu mw-portlet mw-portlet-lang" > <div class="vector-menu-heading"> In other languages </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-add wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:NewItem?site=mediawikiwiki&amp;page=Trust+and+Safety+Product%2FTemporary+Accounts%2FFor+developers" title="Add interlanguage links" class="wbc-editpage">Add links</a></span></div> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/MediaWiki" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/mediawikiwiki.svg" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="MediaWiki" src="/static/images/mobile/copyright/mediawikiwiki-wordmark.svg" style="width: 7.5em; height: 1.125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search MediaWiki [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search MediaWiki" aria-label="Search MediaWiki" autocapitalize="sentences" title="Search MediaWiki [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-uls" class="mw-list-item active user-links-collapsible-item"><a data-mw="interface" href="#" class="uls-trigger cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet"><span class="vector-icon mw-ui-icon-wikimedia-language mw-ui-icon-wikimedia-wikimedia-language"></span> <span>English</span></a> </li> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page&#039;s font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=spontaneous&amp;uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&amp;returnto=Trust+and+Safety+Product%2FTemporary+Accounts%2FFor+developers" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&amp;returnto=Trust+and+Safety+Product%2FTemporary+Accounts%2FFor+developers" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="More options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=spontaneous&amp;uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&amp;returnto=Trust+and+Safety+Product%2FTemporary+Accounts%2FFor+developers" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&amp;returnto=Trust+and+Safety+Product%2FTemporary+Accounts%2FFor+developers" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">Beginning</div> </a> </li> <li id="toc-Create_temporary_actor_for_your_features" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Create_temporary_actor_for_your_features"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Create temporary actor for your features</span> </div> </a> <ul id="toc-Create_temporary_actor_for_your_features-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Design_guidelines_around_this_change" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Design_guidelines_around_this_change"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Design guidelines around this change</span> </div> </a> <ul id="toc-Design_guidelines_around_this_change-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-How_should_I_update_my_code?" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#How_should_I_update_my_code?"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>How should I update my code?</span> </div> </a> <button aria-controls="toc-How_should_I_update_my_code?-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle How should I update my code? subsection</span> </button> <ul id="toc-How_should_I_update_my_code?-sublist" class="vector-toc-list"> <li id="toc-Questions_you_may_ask_yourself" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Questions_you_may_ask_yourself"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>Questions you may ask yourself</span> </div> </a> <ul id="toc-Questions_you_may_ask_yourself-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Update_a_check_for_the_type_of_user" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Update_a_check_for_the_type_of_user"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>Update a check for the type of user</span> </div> </a> <ul id="toc-Update_a_check_for_the_type_of_user-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Anonymous,_Not_logged-in,_Unregistered,_Unnamed?_A_word_on_terminology" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Anonymous,_Not_logged-in,_Unregistered,_Unnamed?_A_word_on_terminology"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.3</span> <span>Anonymous, Not logged-in, Unregistered, Unnamed? A word on terminology</span> </div> </a> <ul id="toc-Anonymous,_Not_logged-in,_Unregistered,_Unnamed?_A_word_on_terminology-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Creating_a_new_temporary_user" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Creating_a_new_temporary_user"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.4</span> <span>Creating a new temporary user</span> </div> </a> <ul id="toc-Creating_a_new_temporary_user-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Testing_the_onTempUserCreatedRedirect_hook" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Testing_the_onTempUserCreatedRedirect_hook"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.5</span> <span>Testing the onTempUserCreatedRedirect hook</span> </div> </a> <ul id="toc-Testing_the_onTempUserCreatedRedirect_hook-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Updating_AbuseFilter_filters" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Updating_AbuseFilter_filters"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.6</span> <span>Updating AbuseFilter filters</span> </div> </a> <ul id="toc-Updating_AbuseFilter_filters-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Updating_AbuseFilter_permissions" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Updating_AbuseFilter_permissions"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.7</span> <span>Updating AbuseFilter permissions</span> </div> </a> <ul id="toc-Updating_AbuseFilter_permissions-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Update_documentation" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Update_documentation"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.8</span> <span>Update documentation</span> </div> </a> <ul id="toc-Update_documentation-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-FAQ_for_developers" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#FAQ_for_developers"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>FAQ for developers</span> </div> </a> <button aria-controls="toc-FAQ_for_developers-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle FAQ for developers subsection</span> </button> <ul id="toc-FAQ_for_developers-sublist" class="vector-toc-list"> <li id="toc-What&#039;s_the_change_from_a_technical_perspective?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#What&#039;s_the_change_from_a_technical_perspective?"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.1</span> <span>What's the change from a technical perspective?</span> </div> </a> <ul id="toc-What&#039;s_the_change_from_a_technical_perspective?-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-How_can_my_code_check_if_temp_accounts_is_enabled?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#How_can_my_code_check_if_temp_accounts_is_enabled?"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.2</span> <span>How can my code check if temp accounts is enabled?</span> </div> </a> <ul id="toc-How_can_my_code_check_if_temp_accounts_is_enabled?-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Should_my_tool_treat_temp_accounts_the_same_as_regular_accounts?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Should_my_tool_treat_temp_accounts_the_same_as_regular_accounts?"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.3</span> <span>Should my tool treat temp accounts the same as regular accounts?</span> </div> </a> <ul id="toc-Should_my_tool_treat_temp_accounts_the_same_as_regular_accounts?-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Why_are_temporary_accounts_implemented_so_similarly_to_named_user_accounts,_if_the_users_themselves_are_more_similar_to_anonymous_users?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Why_are_temporary_accounts_implemented_so_similarly_to_named_user_accounts,_if_the_users_themselves_are_more_similar_to_anonymous_users?"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.4</span> <span>Why are temporary accounts implemented so similarly to named user accounts, if the users themselves are more similar to anonymous users?</span> </div> </a> <ul id="toc-Why_are_temporary_accounts_implemented_so_similarly_to_named_user_accounts,_if_the_users_themselves_are_more_similar_to_anonymous_users?-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Why_does_User::isRegistered_return_true_instead_of_false_for_a_temporary_account?_Shouldn’t_temporary_users_mostly_be_treated_like_anonymous_users?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Why_does_User::isRegistered_return_true_instead_of_false_for_a_temporary_account?_Shouldn’t_temporary_users_mostly_be_treated_like_anonymous_users?"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.5</span> <span>Why does User::isRegistered return true instead of false for a temporary account? Shouldn’t temporary users mostly be treated like anonymous users?</span> </div> </a> <ul id="toc-Why_does_User::isRegistered_return_true_instead_of_false_for_a_temporary_account?_Shouldn’t_temporary_users_mostly_be_treated_like_anonymous_users?-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Can_our_database_handle_the_increased_number_of_new_accounts_created?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Can_our_database_handle_the_increased_number_of_new_accounts_created?"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.6</span> <span>Can our database handle the increased number of new accounts created?</span> </div> </a> <ul id="toc-Can_our_database_handle_the_increased_number_of_new_accounts_created?-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-What_will_be_stored_in_the_database_instead_of_the_IP_address?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#What_will_be_stored_in_the_database_instead_of_the_IP_address?"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.7</span> <span>What will be stored in the database instead of the IP address?</span> </div> </a> <ul id="toc-What_will_be_stored_in_the_database_instead_of_the_IP_address?-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Where_in_the_database_will_IP_addresses_be_stored?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Where_in_the_database_will_IP_addresses_be_stored?"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.8</span> <span>Where in the database will IP addresses be stored?</span> </div> </a> <ul id="toc-Where_in_the_database_will_IP_addresses_be_stored?-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Will_old_IP_addresses_be_hidden?_Where_IP_addresses_are_already_stored_in_the_database,_will_they_be_removed?_Will_it_be_possible_to_instantiate_a_`User`_object_with_an_IP_address_as_its_name?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Will_old_IP_addresses_be_hidden?_Where_IP_addresses_are_already_stored_in_the_database,_will_they_be_removed?_Will_it_be_possible_to_instantiate_a_`User`_object_with_an_IP_address_as_its_name?"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.9</span> <span>Will old IP addresses be hidden? Where IP addresses are already stored in the database, will they be removed? Will it be possible to instantiate a `User` object with an IP address as its name?</span> </div> </a> <ul id="toc-Will_old_IP_addresses_be_hidden?_Where_IP_addresses_are_already_stored_in_the_database,_will_they_be_removed?_Will_it_be_possible_to_instantiate_a_`User`_object_with_an_IP_address_as_its_name?-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Will_this_increase_the_amount_of_traffic_bypassing_the_Varnish_cache?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Will_this_increase_the_amount_of_traffic_bypassing_the_Varnish_cache?"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.10</span> <span>Will this increase the amount of traffic bypassing the Varnish cache?</span> </div> </a> <ul id="toc-Will_this_increase_the_amount_of_traffic_bypassing_the_Varnish_cache?-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-What_is_mw.config.get(&#039;wgUserName&#039;)_for_a_temporary_user?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#What_is_mw.config.get(&#039;wgUserName&#039;)_for_a_temporary_user?"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.11</span> <span>What is mw.config.get('wgUserName') for a temporary user?</span> </div> </a> <ul id="toc-What_is_mw.config.get(&#039;wgUserName&#039;)_for_a_temporary_user?-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-What_is_mw.config.get(&#039;wgUserGroups&#039;)_for_a_temporary_user?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#What_is_mw.config.get(&#039;wgUserGroups&#039;)_for_a_temporary_user?"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.12</span> <span>What is mw.config.get('wgUserGroups') for a temporary user?</span> </div> </a> <ul id="toc-What_is_mw.config.get(&#039;wgUserGroups&#039;)_for_a_temporary_user?-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Can_temporary_users_be_assigned_to_groups,_autopromoted_or_autoconfirmed?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Can_temporary_users_be_assigned_to_groups,_autopromoted_or_autoconfirmed?"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.13</span> <span>Can temporary users be assigned to groups, autopromoted or autoconfirmed?</span> </div> </a> <ul id="toc-Can_temporary_users_be_assigned_to_groups,_autopromoted_or_autoconfirmed?-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-I&#039;m_a_developer_for_a_tool_or_third-party_MediaWiki_extension._How_do_I_let_the_WMF_know_about_my_needs?" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#I&#039;m_a_developer_for_a_tool_or_third-party_MediaWiki_extension._How_do_I_let_the_WMF_know_about_my_needs?"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.14</span> <span>I'm a developer for a tool or third-party MediaWiki extension. How do I let the WMF know about my needs?</span> </div> </a> <ul id="toc-I&#039;m_a_developer_for_a_tool_or_third-party_MediaWiki_extension._How_do_I_let_the_WMF_know_about_my_needs?-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-PHPUnit_tests_for_my_extension_break_with_temp_accounts_enabled" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#PHPUnit_tests_for_my_extension_break_with_temp_accounts_enabled"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.15</span> <span>PHPUnit tests for my extension break with temp accounts enabled</span> </div> </a> <ul id="toc-PHPUnit_tests_for_my_extension_break_with_temp_accounts_enabled-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-I_have_questions_not_answered_on_this_page" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#I_have_questions_not_answered_on_this_page"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.16</span> <span>I have questions not answered on this page</span> </div> </a> <ul id="toc-I_have_questions_not_answered_on_this_page-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Trust and Safety Product/Temporary Accounts/For developers</span></h1> <div class="mw-indicators"> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Trust_and_Safety_Product/Temporary_Accounts/For_developers" title="View the content page [c]" accesskey="c"><span>Page</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:Trust_and_Safety_Product/Temporary_Accounts/For_developers" rel="discussion" class="mw-redirect" title="Discussion about the content page [t]" accesskey="t"><span>Discussion</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Trust_and_Safety_Product/Temporary_Accounts/For_developers"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit" title="Edit the source code of this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Trust_and_Safety_Product/Temporary_Accounts/For_developers"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit" title="Edit the source code of this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Trust_and_Safety_Product/Temporary_Accounts/For_developers" title="A list of all wiki pages that link here [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Trust_and_Safety_Product/Temporary_Accounts/For_developers" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;oldid=6864184" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&amp;page=Trust_and_Safety_Product%2FTemporary_Accounts%2FFor_developers&amp;id=6864184&amp;wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&amp;url=https%3A%2F%2Fwww.mediawiki.org%2Fwiki%2FTrust_and_Safety_Product%2FTemporary_Accounts%2FFor_developers"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&amp;url=https%3A%2F%2Fwww.mediawiki.org%2Fwiki%2FTrust_and_Safety_Product%2FTemporary_Accounts%2FFor_developers"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-create_a_book" class="mw-list-item"><a href="/w/index.php?title=Special:Book&amp;bookcmd=book_creator&amp;referer=Trust+and+Safety+Product%2FTemporary+Accounts%2FFor+developers"><span>Create a book</span></a></li><li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&amp;page=Trust_and_Safety_Product%2FTemporary_Accounts%2FFor_developers&amp;action=show-download-screen"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects emptyPortlet" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div id="siteSub" class="noprint">From mediawiki.org</div> </div> <div id="contentSub"><div id="mw-content-subtitle"><div class="subpages">&lt; <bdi dir="ltr"><a href="/wiki/Special:MyLanguage/Trust_and_Safety_Product" title="Special:MyLanguage/Trust and Safety Product">Trust and Safety Product</a></bdi> | <bdi dir="ltr"><a href="/wiki/Special:MyLanguage/Trust_and_Safety_Product/Temporary_Accounts" title="Special:MyLanguage/Trust and Safety Product/Temporary Accounts">Temporary Accounts</a></bdi></div></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-pt-translate-header noprint nomobile" dir="ltr" lang="en"><a href="/w/index.php?title=Special:Translate&amp;group=page-Trust+and+Safety+Product%2FTemporary+Accounts%2FFor+developers&amp;action=page&amp;filter=&amp;action_source=translate_page" title="Special:Translate">Translate this page</a></div><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="mw-pt-languages noprint navigation-not-searchable" lang="en" dir="ltr"><div class="mw-pt-languages-label">Languages:</div><ul class="mw-pt-languages-list"><li><a href="/wiki/Trust_and_Safety_Product/Temporary_Accounts/For_developers/id" class="mw-pt-progress mw-pt-progress--low" title="Produk Kepercayaan dan Keamanan/Akun Sementara/Untuk pengembang (1% translated)" lang="id" dir="ltr">Bahasa Indonesia</a></li> <li><span class="mw-pt-languages-ui mw-pt-languages-selected mw-pt-progress mw-pt-progress--complete" lang="en" dir="ltr">English</span></li> <li><a href="/wiki/Trust_and_Safety_Product/Temporary_Accounts/For_developers/fr" class="mw-pt-progress mw-pt-progress--low" title="Produit de confiance et de sécurité/Comptes temporaires/Développeurs (2% translated)" lang="fr" dir="ltr">français</a></li> <li><a href="/wiki/Trust_and_Safety_Product/Temporary_Accounts/For_developers/pt-br" class="mw-pt-progress mw-pt-progress--low" title="Produtos de confiança e segurança/Contas temporárias/Para desenvolvedores (14% translated)" lang="pt-BR" dir="ltr">português do Brasil</a></li> <li><a href="/wiki/Trust_and_Safety_Product/Temporary_Accounts/For_developers/zh" class="mw-pt-progress mw-pt-progress--med" title="信任與安全產品/臨時帳號/進展更新/給開發者 (26% translated)" lang="zh" dir="ltr">中文</a></li> <li><a href="/wiki/Trust_and_Safety_Product/Temporary_Accounts/For_developers/ja" class="mw-pt-progress mw-pt-progress--low" title="信頼と安全製品/臨時アカウント/開発者向け (2% translated)" lang="ja" dir="ltr">日本語</a></li></ul></div> <div class="ipm plainlinks" lang="en" dir="ltr"> <style data-mw-deduplicate="TemplateStyles:r6778971">.mw-parser-output .ipm{margin:1em 0;box-sizing:border-box;clear:both;background:#fff}.mw-parser-output .ipm-tabs{display:flex;flex-direction:column;flex-wrap:wrap;text-align:center}.mw-parser-output .ipm-tab{flex:1 1 0;width:100%;margin:0;box-sizing:border-box;background-color:inherit;padding:.8em;font-weight:bold;border-top:0.2em solid #f8f9fa}.mw-parser-output .ipm-tab.selected{background-color:#f8f9fa;border-left:0.5em solid #36c}.mw-parser-output .ipm-tab img{min-width:22px}.mw-parser-output .ipm-content{font-size:1.1em;border-bottom:2px solid #36c;padding:1em}.mw-parser-output .ipm-break{clear:both}@media(min-width:550px){.mw-parser-output .ipm-tabs{flex-direction:row;padding:0;margin-top:0!important}.mw-parser-output .ipm-tabs>.ipm-tab{display:inline-block;vertical-align:bottom;white-space:nowrap;width:auto;margin:0 .2em 0 0;border-top:.5em solid #36c;font-size:1.3em}.mw-parser-output .ipm-tab.selected{border-left:0}}@media(min-width:1000px){.mw-parser-output .ipm-tabs>.ipm-tab{flex:0 1 0}}@media screen{html.skin-theme-clientpref-night .mw-parser-output .ipm{background-color:transparent}html.skin-theme-clientpref-night .mw-parser-output .ipm-tabs>.ipm-tab.selected{background-color:transparent;border-top-color:#AFB6E9}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .ipm-tabs>.ipm-tab.selected{background-color:transparent;border-top-color:#AFB6E9}html.skin-theme-clientpref-os .mw-parser-output .ipm{background-color:transparent}}</style> <div class="ipm-tabs" role="navigation"> <div class="ipm-tab selected"><a href="/wiki/Special:MyLanguage/Trust_and_Safety_Product/Temporary_Accounts" title="Special:MyLanguage/Trust and Safety Product/Temporary Accounts">Overview</a><span style="display:none"><a href="/wiki/Trust_and_Safety_Product/Temporary_Accounts" title="Trust and Safety Product/Temporary Accounts"> </a></span></div> <div class="ipm-tab"><a href="/wiki/Special:MyLanguage/Trust_and_Safety_Product/Temporary_Accounts/Updates" title="Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates">Updates</a><span style="display:none"><a href="/wiki/Trust_and_Safety_Product/Temporary_Accounts/Updates" title="Trust and Safety Product/Temporary Accounts/Updates"> </a></span></div> <div class="ipm-tab"><a href="/wiki/Special:MyLanguage/Trust_and_Safety_Product/Temporary_Accounts/Updates/Legal" title="Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates/Legal">Legal</a></div> <div class="ipm-tab"><a href="/wiki/Special:MyLanguage/Trust_and_Safety_Product/Temporary_Accounts/FAQ" title="Special:MyLanguage/Trust and Safety Product/Temporary Accounts/FAQ">FAQ</a><span style="display:none"><a href="/wiki/Trust_and_Safety_Product/Temporary_Accounts/FAQ" title="Trust and Safety Product/Temporary Accounts/FAQ"> </a></span></div> </div> <div class="ipm-break"></div> </div> <p>This page describes some of the technical aspects of <a href="/wiki/Special:MyLanguage/Trust_and_Safety_Product/Temporary_Accounts" title="Special:MyLanguage/Trust and Safety Product/Temporary Accounts">Temporary Accounts</a><span style="display:none"><a href="/wiki/Trust_and_Safety_Product/Temporary_Accounts" title="Trust and Safety Product/Temporary Accounts"> </a></span>. It may be useful to people who are updating <a href="/wiki/Special:MyLanguage/Manual:Interface/JavaScript#Personal_scripts" title="Special:MyLanguage/Manual:Interface/JavaScript">user scripts</a>, <a href="/wiki/Special:MyLanguage/Manual:Bots" title="Special:MyLanguage/Manual:Bots">bots</a> and other <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/Tools" class="extiw" title="m:Special:MyLanguage/Tools">tools</a>. </p> <meta property="mw:PageProp/toc"/> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="Create_temporary_actor_for_your_features" data-mw-thread-id="h-Create_temporary_actor_for_your_features"><span data-mw-comment-start="" id="h-Create_temporary_actor_for_your_features"></span>Create temporary actor for your features<span data-mw-comment-end="h-Create_temporary_actor_for_your_features"></span></h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=1" title="Edit section: Create temporary actor for your features"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Create_temporary_actor_for_your_features","replies":[]}}--></div> <p>Features you maintain need updating for the introduction of temporary accounts if they ever create IP actors. They do if: </p> <ul><li>Any workflow that leads to an on-wiki log entry including the performer, where the performer might currently be a user whose name is their IP, creates an IP actor.</li> <li>More generally, any workflow that (1) adds another row to the <code><a href="/wiki/Special:MyLanguage/Manual:Actor_table" title="Special:MyLanguage/Manual:Actor table">actor</a><span style="display:none"><a href="/wiki/Manual:Actor_table" title="Manual:Actor table"> </a></span></code> table, and (2) could be performed by a logged out user (a.k.a. anon user, IP user), creates an IP actor.</li></ul> <dl><dt>Why do I need to do this?</dt></dl> <ul><li>Once temporary accounts are enabled, we don’t want to create any actor that has the IP address as their name.</li> <li>Much of the work that has been done so far has focused on editing (particularly via <code>EditPage</code>, whether via <code>action=edit</code>, <code>ApiEditPage</code>, <code>ApiVisualEditorEdit</code>, etc). If a logged out user edits via these means, a temporary account is created for them.</li> <li>However, actors can be created via other workflows (e.g. editing structured data as a logged-out user). Until these workflows are updated, MediaWiki will continue to save users whose name is their IP address.</li></ul> <p>For detailed instructions on what to do, see the sections below. </p> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="Design_guidelines_around_this_change" data-mw-thread-id="h-Design_guidelines_around_this_change"><span data-mw-comment-start="" id="h-Design_guidelines_around_this_change"></span>Design guidelines around this change<span data-mw-comment-end="h-Design_guidelines_around_this_change"></span></h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=2" title="Edit section: Design guidelines around this change"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Design_guidelines_around_this_change","replies":[]}}--></div> <ul><li><b>Parity with IP editor rights</b>, at first. Initially, the temporary account experience should minimally have parity with the legacy IP experience in terms of what capabilities are available to such editors. Though the architecture of temporary accounts affords opportunities to open up richer and persistent experiences to logged-out people, these opportunities should be deferred until after the initial launch so that communities have as little change as possible during this major shift.</li> <li><b>Temporary accounts should feel ephemeral.</b> People should not think they have an account when they do not, and there is space for education to include highlighting the incentives of creating an account as opposed to remaining logged-out (similar to the prompts that appear for IP editors).</li> <li><b>Clarity that anyone can edit.</b> Equally, it should also be clear to the person with a temporary account that it is still not required for them to create an account to continue editing. Maintaining one of the <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/Founding_principles" class="extiw" title="m:Special:MyLanguage/Founding principles">Founding principles of Wikimedia projects</a>.</li> <li><b>Guidance and education incorporated in the new experience.</b> <ul><li>People should not be jarred or confused when the account disappears.</li> <li>People should not perceive that their privacy is reduced with a temporary account compared to an IP-edit. On the contrary, consider opportunities to highlight that privacy is improved as a temporary account editor compared to an IP edit, since the IP address will no longer be shown except to privileged users.</li></ul></li></ul> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="How_should_I_update_my_code?" data-mw-thread-id="h-How_should_I_update_my_code?"><span id="How_should_I_update_my_code.3F"></span><span data-mw-comment-start="" id="h-How_should_I_update_my_code?"></span>How should I update my code?<span data-mw-comment-end="h-How_should_I_update_my_code?"></span></h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=3" title="Edit section: How should I update my code?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-How_should_I_update_my_code?","replies":["h-Questions_you_may_ask_yourself-How_should_I_update_my_code?","h-Update_a_check_for_the_type_of_user-How_should_I_update_my_code?","h-Anonymous,_Not_logged-in,_Unregistered,_Unnamed?_A_word_on_terminology-How_should_I_update_my_code?","h-Creating_a_new_temporary_user-How_should_I_update_my_code?","h-Testing_the_onTempUserCreatedRedirect_hook-How_should_I_update_my_code?","h-Updating_AbuseFilter_filters-How_should_I_update_my_code?","h-Updating_AbuseFilter_permissions-How_should_I_update_my_code?","h-Update_documentation-How_should_I_update_my_code?"]}}--></div> <div class="mw-heading mw-heading3"><h3 id="Questions_you_may_ask_yourself" data-mw-thread-id="h-Questions_you_may_ask_yourself-How_should_I_update_my_code?"><span data-mw-comment-start="" id="h-Questions_you_may_ask_yourself-How_should_I_update_my_code?"></span>Questions you may ask yourself<span data-mw-comment-end="h-Questions_you_may_ask_yourself-How_should_I_update_my_code?"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=4" title="Edit section: Questions you may ask yourself"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>There is no single, simple answer to this question. Temporary accounts are a new way of representing anonymous editors, which could have enormous impacts on some parts of software but barely make a difference to others. Solutions might involve a lot of product research, but a straightforward technical fix. Or a technical fix might be complicated and require domain expertise and judgment. </p><p>Examples of ways code might be affected and how to consider fixing it (disclaimer: this is not exhaustive): </p> <ul><li>A feature is unavailable to anonymous users. Should it be available to temporary users?</li> <li>A feature works differently for anonymous vs registered users. How should it work for temporary users?</li> <li>A feature assumes anonymous users are less trustworthy, and registered users are trustworthy. How should it treat temporary users?</li> <li>A feature displays different UI messages for anonymous vs registered users. What should it display for temporary users?</li> <li>A feature assumes registered users have preferences. It now needs to check for named users instead, since temporary users don’t have preferences.</li> <li>A feature assumes registered users have a watchlist. It now needs to check for named users instead, since temporary users don’t have a watchlist.</li> <li>A feature assumes registered users have rights. However, temp users will have no more rights than anonymous users (see <a href="/wiki/Special:ListGroupRights" title="Special:ListGroupRights">Special:ListGroupRights</a>), so code should be updated accordingly.</li> <li>A feature looks for the IP address in the user name (it will no longer be found). If the feature doesn’t leak the IP address (or related information, e.g. geolocation data), look in the request data instead using <code>$request->getIP()</code>. Otherwise, the feature should be discontinued or only available to checkusers, admins and users in a new “temporary account viewer” group.</li> <li>Statistics are gathered separately for anonymous and registered users. How should temporary users be bucketed?</li> <li>A user is flagged as anonymous or registered (e.g. in logs or API results). How should temporary users be flagged? What would features checking these flags like to know? Note that in most APIs, temporary users are flagged separately from IP users: (<a href="https://phabricator.wikimedia.org/T341228" class="extiw" title="phab:T341228">T341228</a>).</li> <li>Some feature or part of the infrastructure assumes that the <code>user</code> table will keep growing at its current rate. This assumption won’t hold after temporary accounts are enabled: the <code>user</code> table will grow more quickly.</li> <li>Some feature or part of the infrastructure assumes that the ratio of registered to anonymous users accessing Wikimedia sites will stay roughly the same. This assumption won’t hold anywhere that temporary users are treated as registered users.</li> <li>A feature that relies on looking at the user’s ID to identify if the user is registered or unregistered. Temporary accounts will not have a <code>user_id</code> of 0. An example of this might be instrumentation.</li></ul> <p>We are doing an audit of features that might be affected (<a href="https://phabricator.wikimedia.org/T349219" class="extiw" title="phab:T349219">T349219</a>), and will contact you if we discover you are affected. However we may not find everything. </p> <div class="mw-heading mw-heading3"><h3 id="Update_a_check_for_the_type_of_user" data-mw-thread-id="h-Update_a_check_for_the_type_of_user-How_should_I_update_my_code?"><span data-mw-comment-start="" id="h-Update_a_check_for_the_type_of_user-How_should_I_update_my_code?"></span>Update a check for the type of user<span data-mw-comment-end="h-Update_a_check_for_the_type_of_user-How_should_I_update_my_code?"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=5" title="Edit section: Update a check for the type of user"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In the simplest scenario, you may only need to update a check for the type of user: </p> <table class="wikitable"> <caption>Code changes Before and After </caption> <tbody><tr> <th>Your code was checking... </th> <th>You want... </th> <th>Your code should now... </th></tr> <tr> <td><code>$user->isRegistered()</code> </td> <td>to treat temp users the same as registered users </td> <td>no change needed </td></tr> <tr> <td><code>$user->isRegistered()</code> </td> <td>to treat temp users the same as anon users </td> <td>check <code>$user->isNamed()</code> </td></tr> <tr> <td><code>$user->isAnon()</code> </td> <td>to treat temp users the same as registered users </td> <td>no change needed </td></tr> <tr> <td><code>$user->isAnon()</code> </td> <td>to treat temp users the same as anon users </td> <td>check <code>!$user->isNamed()</code> </td></tr> <tr> <td><code>$user->isRegistered()</code> or <code>$user->isAnon()</code> </td> <td>to treat temp users differently from registered users or anon users </td> <td>add another check for <code>$user->isTemp()</code> </td></tr></tbody></table> <p>The <code>UserIdentityUtils</code> service has the same methods and should be used when a <code>UserIdentityUtils</code> is available, but not a full <code>User</code> (or <code>Authority</code>) object. The <code>UserNameUtils</code> service also has a method isTemp. </p><p>Similar methods are available in JavaScript via the <code>mediawiki.util</code> and <code>mediawiki.user</code> modules: </p> <ul><li><code>mw.util.isTemporaryUser</code></li> <li><code>mw.user.isTemp</code></li> <li><code>mw.user.isNamed</code></li></ul> <p>However, we have encountered more complex examples where more complicated product and technical solutions are needed. For example, when an IP address is blocked from editing, there is an option to block anonymous users only. Should this block temporary users too? Should there be a separate option? Code updates could include changes to core PHP classes, UI forms, site configuration options and the database schema. Similarly significant updates may be needed to other products. </p><p>It’s important to emphasize checking your products carefully, since they may need to be re-conceived for temporary accounts. </p> <div class="mw-heading mw-heading3"><h3 id="Anonymous,_Not_logged-in,_Unregistered,_Unnamed?_A_word_on_terminology" data-mw-thread-id="h-Anonymous,_Not_logged-in,_Unregistered,_Unnamed?_A_word_on_terminology-How_should_I_update_my_code?"><span id="Anonymous.2C_Not_logged-in.2C_Unregistered.2C_Unnamed.3F_A_word_on_terminology"></span><span data-mw-comment-start="" id="h-Anonymous,_Not_logged-in,_Unregistered,_Unnamed?_A_word_on_terminology-How_should_I_update_my_code?"></span>Anonymous, Not logged-in, Unregistered, Unnamed? A word on terminology<span data-mw-comment-end="h-Anonymous,_Not_logged-in,_Unregistered,_Unnamed?_A_word_on_terminology-How_should_I_update_my_code?"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=6" title="Edit section: Anonymous, Not logged-in, Unregistered, Unnamed? A word on terminology"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <table class="wikitable"> <caption>Our proposal on how to refer to IP users, temporary users, and permanent users (more at <a href="https://phabricator.wikimedia.org/T337103#9143741" class="extiw" title="phab:T337103">T337103#9143741</a>) </caption> <tbody><tr> <th rowspan="2">Description </th> <th rowspan="2">Suggestions </th> <th colspan="2">Our proposal </th></tr> <tr> <th>Documentation </th> <th>Code </th></tr> <tr> <td>Users who are recognized by their IP address</td> <td>IP, Anonymous, Logged-out, Unregistered</td> <td>IP users</td> <td>Rename <code>User::isAnon</code> to <code>User::isIP</code> or remove it altogether </td></tr> <tr> <td>Users whose accounts were autocreated when performing some action</td> <td>Temporary, Unnamed, Limited</td> <td>Temporary users</td> <td>Keep <code>User::isTemp</code>, or rename to <code>User::hasTempAccount</code> </td></tr> <tr> <td>Users who have been through a full registration process</td> <td>Registered, Named, Regular</td> <td>Permanent users</td> <td>Rename <code>User::isNamed</code> to <code>User::isPermanent</code> or <code>User::hasPermanentAccount</code> </td></tr> <tr> <td>Users who have a row in the user table</td> <td>Registered, Something involving "account"</td> <td>Users who have an account</td> <td>Rename <code>User::isRegistered</code> to <code>User::hasAccount</code>, or remove it and check <code>User::getID</code> instead </td></tr></tbody></table> <div class="mw-heading mw-heading3"><h3 id="Creating_a_new_temporary_user" data-mw-thread-id="h-Creating_a_new_temporary_user-How_should_I_update_my_code?"><span data-mw-comment-start="" id="h-Creating_a_new_temporary_user-How_should_I_update_my_code?"></span>Creating a new temporary user<span data-mw-comment-end="h-Creating_a_new_temporary_user-How_should_I_update_my_code?"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=7" title="Edit section: Creating a new temporary user"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>If your feature allows logged-out users to perform an action that creates an actor in the <code>actor</code> table whose name is their IP address, you'll need instead to create a temporary account the first time a logged out user performs the action. Attempting to create an actor with an IP address as the name now throws an error if temporary accounts are enabled. </p><p>What to do: </p> <ul><li>File a subtask of <a href="https://phabricator.wikimedia.org/T349129" class="extiw" title="phab:T349129">T349129</a> (example subtask: <a href="https://phabricator.wikimedia.org/T349130" class="extiw" title="phab:T349130">T349130</a>)</li> <li>You only need to do any of this if the permissions configuration allows anyone (group <code>*</code>) to perform the action. Keep this configuration. If a logged-out user can't perform the action, a temporary account cannot be auto-created for it.</li> <li>If the action/permission your feature handles isn't <code>edit</code>, add it to the list of actions that create a temporary user, in <code>$wgAutoCreateTempUser['actions']</code>. (The list contains <code>edit</code> by default.)</li> <li>Use the <code>TempUserCreator</code> to create a temporary user. Per <a href="https://phabricator.wikimedia.org/T359405" class="extiw" title="phab:T359405">T359405</a>, do this a) once it is likely that the action will be successful (e.g. after permissions checks and other checks that might throw an error) but b) before any code that might generate log entries that would reference a failed edit attempt (e.g. AbuseFilter trips). (Note that after the temporary user is created it will be different from the global context user.)</li> <li>To see an example, look at <code>EditPage::createTempUser</code>. Note that <code>EditPage</code> has the added complexity of needing to show a preview with the temporary user name, before the temporary user is created. This should be an unusual requirement, but may be re-implemented in your feature, if necessary.</li> <li>In an action API handler (anything that extends <code>ApiBase</code>), use the <code>ApiCreateTempUserTrait</code>, which creates a login redirect URL via CentralAuth (or whichever extension handles the <code>onTempUserCreatedRedirect</code> hook), with the correct values for the <code>returnto</code>, <code>returntoquery</code>, and <code>returntoanchor</code> parameters.</li> <li>For other (non-action API) contexts, build the redirect URL and then run the <code>onTempUserCreatedRedirect</code> hook, which modifies the URL for central login. See <code>EditPage::doPostEditRedirect</code> for an example.</li> <li>If you want to show a popup explaining what a temporary account is after the action is completed, use the <code>mediawiki.tempUserCreated</code> module.</li></ul> <div class="mw-heading mw-heading3"><h3 id="Testing_the_onTempUserCreatedRedirect_hook" data-mw-thread-id="h-Testing_the_onTempUserCreatedRedirect_hook-How_should_I_update_my_code?"><span data-mw-comment-start="" id="h-Testing_the_onTempUserCreatedRedirect_hook-How_should_I_update_my_code?"></span>Testing the <code>onTempUserCreatedRedirect</code> hook<span data-mw-comment-end="h-Testing_the_onTempUserCreatedRedirect_hook-How_should_I_update_my_code?"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=8" title="Edit section: Testing the onTempUserCreatedRedirect hook"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>To test that you’re using this hook correctly, without having a full CentralAuth setup locally, you may use this snippet in your <code>LocalSettings.php</code>: </p> <div class="mw-highlight mw-highlight-lang-php mw-content-ltr" dir="ltr"><pre><span></span><span class="nv">$wgHooks</span><span class="p">[</span><span class="s1">'TempUserCreatedRedirect'</span><span class="p">][]</span> <span class="o">=</span> <span class="k">function</span> <span class="p">(</span> <span class="nx">\MediaWiki\Session\Session</span> <span class="nv">$session</span><span class="p">,</span> <span class="nx">\MediaWiki\User\UserIdentity</span> <span class="nv">$user</span><span class="p">,</span> <span class="nx">string</span> <span class="nv">$returnTo</span><span class="p">,</span> <span class="nx">string</span> <span class="nv">$returnToQuery</span><span class="p">,</span> <span class="nx">string</span> <span class="nv">$returnToAnchor</span><span class="p">,</span> <span class="o">&amp;</span><span class="nv">$redirectUrl</span> <span class="p">)</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span> <span class="nv">$returnTo</span> <span class="o">===</span> <span class="s1">''</span> <span class="p">)</span> <span class="p">{</span> <span class="nv">$returnTo</span> <span class="o">=</span> <span class="nx">\MediaWiki\Title\Title</span><span class="o">::</span><span class="na">newMainPage</span><span class="p">()</span><span class="o">-></span><span class="na">getFullText</span><span class="p">();</span> <span class="p">}</span> <span class="k">if</span> <span class="p">(</span> <span class="nv">$returnToQuery</span> <span class="o">===</span> <span class="s1">''</span> <span class="p">)</span> <span class="p">{</span> <span class="nv">$returnToQuery</span> <span class="o">=</span> <span class="s1">'redirected-by-hook=yes'</span><span class="p">;</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="nv">$returnToQuery</span> <span class="o">=</span> <span class="s2">"redirected-by-hook=yes&amp;</span><span class="si">$returnToQuery</span><span class="s2">"</span><span class="p">;</span> <span class="p">}</span> <span class="nv">$redirectUrl</span> <span class="o">=</span> <span class="nx">\MediaWiki\Title\Title</span><span class="o">::</span><span class="na">newFromTextThrow</span><span class="p">(</span> <span class="nv">$returnTo</span> <span class="p">)</span> <span class="o">-></span><span class="na">getFullURL</span><span class="p">(</span> <span class="nv">$returnToQuery</span> <span class="p">)</span> <span class="o">.</span> <span class="nv">$returnToAnchor</span><span class="p">;</span> <span class="p">};</span> </pre></div> <p>This sets the redirect URL to the given title, query and anchor (without an intermediate central login), and adds <code>redirected-by-hook=yes</code> to the query so you can tell that the hook was used. </p> <div class="mw-heading mw-heading3"><h3 id="Updating_AbuseFilter_filters" data-mw-thread-id="h-Updating_AbuseFilter_filters-How_should_I_update_my_code?"><span data-mw-comment-start="" id="h-Updating_AbuseFilter_filters-How_should_I_update_my_code?"></span>Updating AbuseFilter filters<span data-mw-comment-end="h-Updating_AbuseFilter_filters-How_should_I_update_my_code?"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=9" title="Edit section: Updating AbuseFilter filters"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Filters used by <a href="/wiki/Special:MyLanguage/Extension:AbuseFilter" title="Special:MyLanguage/Extension:AbuseFilter">AbuseFilter</a><span style="display:none"><a href="/wiki/Extension:AbuseFilter" title="Extension:AbuseFilter"> </a></span> that use IPs in their conditions may need to be updated to work with temporary accounts. Notably, the <code>user_name</code> variable is expected to no longer return an IP, breaking any condition that relies on that access. The following migration steps are expected but is subject to change: </p> <ul><li>Conditions that use the <code>ip_in_range</code> or <code>ip_in_ranges</code> will no longer work, as the <code>user_name</code> passed through will no longer contain the IP for anonymous users. Instead, a new proposed variable <code>user_unnamed_ip</code> should be used instead. Work on this is tracked via <a href="https://phabricator.wikimedia.org/T357772" class="extiw" title="phab:T357772">phab:T357772</a>.</li> <li>Conditions that use <code>user_name</code> to access the IP should instead use the proposed <code>user_unnamed_ip</code> variable.</li> <li>Conditions that implicitly check for IPs/anonymous users (eg. via <code>user_age</code> or <code>user_groups</code>) may not work. Instead, use the new <code>user_type</code> variable which can return 'named', 'temp', 'ip', 'external', or 'unknown'. Depending on what the filter does, it may need to filter for both 'temp' and 'ip' values.</li></ul> <p><code>user_unnamed_ip</code> works for anonymous and temporary users, so filters using <code>user_name</code> can be updated to use <code>user_unnamed_ip</code> instead, allowing for an easier migration of filters. This should be done on each wiki before temporary accounts are deployed there. </p> <div class="mw-heading mw-heading3"><h3 id="Updating_AbuseFilter_permissions" data-mw-thread-id="h-Updating_AbuseFilter_permissions-How_should_I_update_my_code?"><span data-mw-comment-start="" id="h-Updating_AbuseFilter_permissions-How_should_I_update_my_code?"></span>Updating AbuseFilter permissions<span data-mw-comment-end="h-Updating_AbuseFilter_permissions-How_should_I_update_my_code?"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=10" title="Edit section: Updating AbuseFilter permissions"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In order to support IPs as PII, AbuseFilter now has the concept of protected variables, which are variables containing sensitive information and access to which is restricted. <code>user_unnamed_ip</code> is a protected variable. Filters that use protected variables are themselves considered protected and both edit and view access are similarly restricted. </p><p>The following rights have been added: </p> <table class="wikitable"> <tbody><tr> <th>Right</th> <th>Description </th></tr> <tr> <td><code>abusefilter-access-protected-vars</code></td> <td>View and create filters that use protected variables </td></tr> <tr> <td><code>abusefilter-protected-vars-log </code></td> <td>View logs related to accessing protected variable values </td></tr></tbody></table> <p>Maintainers will require the <code>abusefilter-access-protected-vars</code> in order to create and view filters and logs associated with protected variables. For more details, see <a href="/wiki/Special:MyLanguage/Extension:AbuseFilter/Rules_format#Protected_variables" title="Special:MyLanguage/Extension:AbuseFilter/Rules format">Extension:AbuseFilter/Rules format</a><span style="display:none"><a href="/wiki/Extension:AbuseFilter/Rules_format#Protected_variables" title="Extension:AbuseFilter/Rules format"> </a></span>. </p> <div class="mw-heading mw-heading3"><h3 id="Update_documentation" data-mw-thread-id="h-Update_documentation-How_should_I_update_my_code?"><span data-mw-comment-start="" id="h-Update_documentation-How_should_I_update_my_code?"></span>Update documentation<span data-mw-comment-end="h-Update_documentation-How_should_I_update_my_code?"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=11" title="Edit section: Update documentation"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Kindly add your information on the <a href="/wiki/Special:MyLanguage/Trust_and_Safety_Product/Temporary_Accounts/Updates/Related_changes" title="Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates/Related changes">updates page</a> as and when you complete any community-facing change relating to this project. </p> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="FAQ_for_developers" data-mw-thread-id="h-FAQ_for_developers"><span data-mw-comment-start="" id="h-FAQ_for_developers"></span>FAQ for developers<span data-mw-comment-end="h-FAQ_for_developers"></span></h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=12" title="Edit section: FAQ for developers"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-FAQ_for_developers","replies":["h-What's_the_change_from_a_technical_perspective?-FAQ_for_developers","h-How_can_my_code_check_if_temp_accounts_is_enabled?-FAQ_for_developers","h-Should_my_tool_treat_temp_accounts_the_same_as_regular_accounts?-FAQ_for_developers","h-Why_are_temporary_accounts_implemented_so_similarly_to_named_user_accounts,_if_t-FAQ_for_developers","h-Why_does_User::isRegistered_return_true_instead_of_false_for_a_temporary_account-FAQ_for_developers","h-Can_our_database_handle_the_increased_number_of_new_accounts_created?-FAQ_for_developers","h-What_will_be_stored_in_the_database_instead_of_the_IP_address?-FAQ_for_developers","h-Where_in_the_database_will_IP_addresses_be_stored?-FAQ_for_developers","h-Will_old_IP_addresses_be_hidden?_Where_IP_addresses_are_already_stored_in_the_da-FAQ_for_developers","h-Will_this_increase_the_amount_of_traffic_bypassing_the_Varnish_cache?-FAQ_for_developers","h-What_is_mw.config.get('wgUserName')_for_a_temporary_user?-FAQ_for_developers","h-What_is_mw.config.get('wgUserGroups')_for_a_temporary_user?-FAQ_for_developers","h-Can_temporary_users_be_assigned_to_groups,_autopromoted_or_autoconfirmed?-FAQ_for_developers","h-I'm_a_developer_for_a_tool_or_third-party_MediaWiki_extension._How_do_I_let_the-FAQ_for_developers","h-PHPUnit_tests_for_my_extension_break_with_temp_accounts_enabled-FAQ_for_developers","h-I_have_questions_not_answered_on_this_page-FAQ_for_developers"]}}--></div> <div class="mw-heading mw-heading3"><h3 id="What's_the_change_from_a_technical_perspective?" data-mw-thread-id="h-What&#039;s_the_change_from_a_technical_perspective?-FAQ_for_developers"><span id="What.27s_the_change_from_a_technical_perspective.3F"></span><span data-mw-comment-start="" id="h-What's_the_change_from_a_technical_perspective?-FAQ_for_developers"></span>What's the change from a technical perspective?<span data-mw-comment-end="h-What's_the_change_from_a_technical_perspective?-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=13" title="Edit section: What&#039;s the change from a technical perspective?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A temporary account is in the <code>user</code> table, and is for all intents and purposes a regular account, but with a few differences: </p> <ol><li>A cookie will be set on the user’s browser when the account is created. This cookie will be used to attribute all subsequent edits performed by this user even if the user’s IP address changes. Essentially, there are no more edits that are attributed directly to IPs. The temporary account exists for as long as the cookie exists. The cookie is set to expire after one year from the first edit.</li> <li>There is an automatically generated username assigned to this user, and no password. As such, it is impossible to log in to this user account. The only way to be logged in as this user is to simply have an unexpired cookie that was set when the account was created.</li> <li>As for the code: <ol><li><code>User::isRegistered()</code> will return true for all registered accounts, including temporary accounts.</li> <li><code>User::isAnon()</code> will return false for such temporary accounts.</li> <li><code>User::isTemp()</code> will return true exclusively for temporary accounts.</li> <li><code>User::isNamed()</code> will return true exclusively for registered accounts that are not temporary accounts.</li></ol></li> <li>Temporary usernames will begin with an asterisk and take the general form of : <b>~12345</b>  (the format is defined by the config <code>$wgAutoCreateTempUser['genPattern']</code>).</li> <li>A temporary user will be represented by a row in the <code>user</code> table. A row can only be determined as representing a temporary (as opposed to registered) user via the name  stored in user.user_name. A temporary user name will match the config <code>$wgAutoCreateTempUser['matchPattern']</code>.</li></ol> <div class="mw-heading mw-heading3"><h3 id="How_can_my_code_check_if_temp_accounts_is_enabled?" data-mw-thread-id="h-How_can_my_code_check_if_temp_accounts_is_enabled?-FAQ_for_developers"><span id="How_can_my_code_check_if_temp_accounts_is_enabled.3F"></span><span data-mw-comment-start="" id="h-How_can_my_code_check_if_temp_accounts_is_enabled?-FAQ_for_developers"></span>How can my code check if temp accounts is enabled?<span data-mw-comment-end="h-How_can_my_code_check_if_temp_accounts_is_enabled?-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=14" title="Edit section: How can my code check if temp accounts is enabled?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>There are two relevant methods in the <code>TempUserConfig</code> interface. </p> <ul><li><code>isEnabled()</code> indicates the auto creation of temporary accounts is currently active</li> <li><code>isKnown()</code> indicates that temporary accounts are a known concept on the wiki. It does not mean that auto creation of temporary accounts is currently active. It does mean that temporary accounts may exist on the wiki.</li></ul> <div class="mw-heading mw-heading3"><h3 id="Should_my_tool_treat_temp_accounts_the_same_as_regular_accounts?" data-mw-thread-id="h-Should_my_tool_treat_temp_accounts_the_same_as_regular_accounts?-FAQ_for_developers"><span id="Should_my_tool_treat_temp_accounts_the_same_as_regular_accounts.3F"></span><span data-mw-comment-start="" id="h-Should_my_tool_treat_temp_accounts_the_same_as_regular_accounts?-FAQ_for_developers"></span>Should my tool treat temp accounts the same as regular accounts?<span data-mw-comment-end="h-Should_my_tool_treat_temp_accounts_the_same_as_regular_accounts?-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=15" title="Edit section: Should my tool treat temp accounts the same as regular accounts?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Depends on your feature. However, if you allow users to accrue anything on a temporary account, such as points, history or preferences, please note that the users will lose everything when the account expires. This may not be a happy outcome for those users. For everything else, treating them as regular accounts may be a safe bet, but you know your product best. </p><p>In the event that you decide to provide extra features for temporary accounts that did not exist for IP editors, please tell us, as we're tracking what extra functionality will be made available for temporary accounts compared to unregistered editors previously. </p> <div class="mw-heading mw-heading3"><h3 id="Why_are_temporary_accounts_implemented_so_similarly_to_named_user_accounts,_if_the_users_themselves_are_more_similar_to_anonymous_users?" data-mw-thread-id="h-Why_are_temporary_accounts_implemented_so_similarly_to_named_user_accounts,_if_t-FAQ_for_developers"><span id="Why_are_temporary_accounts_implemented_so_similarly_to_named_user_accounts.2C_if_the_users_themselves_are_more_similar_to_anonymous_users.3F"></span><span data-mw-comment-start="" id="h-Why_are_temporary_accounts_implemented_so_similarly_to_named_user_accounts,_if_t-FAQ_for_developers"></span>Why are temporary accounts implemented so similarly to named user accounts, if the users themselves are more similar to anonymous users?<span data-mw-comment-end="h-Why_are_temporary_accounts_implemented_so_similarly_to_named_user_accounts,_if_t-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=16" title="Edit section: Why are temporary accounts implemented so similarly to named user accounts, if the users themselves are more similar to anonymous users?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li>CentralAuth integration was a product requirement. After saving a revision, the user is logged in on all wikis. Implementing this without creating a user row would have been very challenging.</li> <li>Creating a user row allows us to share session management infrastructure with logged-in users. The long-lived cookie which keeps the temporary user logged in is identical to the “remember me” feature for regular user accounts.</li> <li>Temporary accounts are meant to represent the actions of a particular person, much like a named account. On the other hand, anonymous (IP address) actors can represent many different people, and it is expected that one person may act via several IP address actors at once.</li></ul> <div class="mw-heading mw-heading3"><h3 id="Why_does_User::isRegistered_return_true_instead_of_false_for_a_temporary_account?_Shouldn’t_temporary_users_mostly_be_treated_like_anonymous_users?" data-mw-thread-id="h-Why_does_User::isRegistered_return_true_instead_of_false_for_a_temporary_account-FAQ_for_developers"><span id="Why_does_User::isRegistered_return_true_instead_of_false_for_a_temporary_account.3F_Shouldn.E2.80.99t_temporary_users_mostly_be_treated_like_anonymous_users.3F"></span><span data-mw-comment-start="" id="h-Why_does_User::isRegistered_return_true_instead_of_false_for_a_temporary_account-FAQ_for_developers"></span>Why does <code>User::isRegistered</code> return true instead of false for a temporary account? Shouldn’t temporary users mostly be treated like anonymous users?<span data-mw-comment-end="h-Why_does_User::isRegistered_return_true_instead_of_false_for_a_temporary_account-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=17" title="Edit section: Why does User::isRegistered return true instead of false for a temporary account? Shouldn’t temporary users mostly be treated like anonymous users?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A temporary account behaves like a named account internally and represents a similar real-world entity (i.e. a person). This concept - and the software - would become muddled if <code>User::isRegistered</code> returned false. </p><p>Many features need to treat temporary accounts the same as named users: for example, temporary users can request tokens and use these as identifiers when editing via the API, e.g. in order to build an edit history via mobile apps. </p><p>Features can be updated on a case-by-case basis to treat temporary users like anonymous users or named users (or in a different way to either). </p> <div class="mw-heading mw-heading3"><h3 id="Can_our_database_handle_the_increased_number_of_new_accounts_created?" data-mw-thread-id="h-Can_our_database_handle_the_increased_number_of_new_accounts_created?-FAQ_for_developers"><span id="Can_our_database_handle_the_increased_number_of_new_accounts_created.3F"></span><span data-mw-comment-start="" id="h-Can_our_database_handle_the_increased_number_of_new_accounts_created?-FAQ_for_developers"></span>Can our database handle the increased number of new accounts created?<span data-mw-comment-end="h-Can_our_database_handle_the_increased_number_of_new_accounts_created?-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=18" title="Edit section: Can our database handle the increased number of new accounts created?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>We can't be sure exactly how many extra new accounts will be made, but if it's in the order of the low double-digit millions per year (as suggested by <a href="https://phabricator.wikimedia.org/T327365#8558972" class="extiw" title="phab:T327365">phab:T327365#8558972</a>), then the corresponding growth of the <code>user</code> and <code>actor</code> tables is acceptable. The size increase of the <code>user_properties</code> table would have been a concern, but temporary accounts can't save preferences, so won't add rows to this table. </p> <div class="mw-heading mw-heading3"><h3 id="What_will_be_stored_in_the_database_instead_of_the_IP_address?" data-mw-thread-id="h-What_will_be_stored_in_the_database_instead_of_the_IP_address?-FAQ_for_developers"><span id="What_will_be_stored_in_the_database_instead_of_the_IP_address.3F"></span><span data-mw-comment-start="" id="h-What_will_be_stored_in_the_database_instead_of_the_IP_address?-FAQ_for_developers"></span>What will be stored in the database instead of the IP address?<span data-mw-comment-end="h-What_will_be_stored_in_the_database_instead_of_the_IP_address?-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=19" title="Edit section: What will be stored in the database instead of the IP address?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The `actor` table stores IP addresses as an actor's name in the `actor_name` column. With temporary accounts enabled, no new users will have their IP address as their name, so their temporary user name will be stored in the `actor_name` column instead. </p><p>The `ip_changes` table also stores IP addresses, but a row will not be made in `ip_changes` for an edit made by a temporary account. </p> <div class="mw-heading mw-heading3"><h3 id="Where_in_the_database_will_IP_addresses_be_stored?" data-mw-thread-id="h-Where_in_the_database_will_IP_addresses_be_stored?-FAQ_for_developers"><span id="Where_in_the_database_will_IP_addresses_be_stored.3F"></span><span data-mw-comment-start="" id="h-Where_in_the_database_will_IP_addresses_be_stored?-FAQ_for_developers"></span>Where in the database will IP addresses be stored?<span data-mw-comment-end="h-Where_in_the_database_will_IP_addresses_be_stored?-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=20" title="Edit section: Where in the database will IP addresses be stored?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>IP addresses for temporary users will be stored the same way for temporary users and users with a full account. They will be stored in the CheckUser tables for a limited time, then they will be purged from the table. </p> <div class="mw-heading mw-heading3"><h3 id="Will_old_IP_addresses_be_hidden?_Where_IP_addresses_are_already_stored_in_the_database,_will_they_be_removed?_Will_it_be_possible_to_instantiate_a_`User`_object_with_an_IP_address_as_its_name?" data-mw-thread-id="h-Will_old_IP_addresses_be_hidden?_Where_IP_addresses_are_already_stored_in_the_da-FAQ_for_developers"><span id="Will_old_IP_addresses_be_hidden.3F_Where_IP_addresses_are_already_stored_in_the_database.2C_will_they_be_removed.3F_Will_it_be_possible_to_instantiate_a_.60User.60_object_with_an_IP_address_as_its_name.3F"></span><span data-mw-comment-start="" id="h-Will_old_IP_addresses_be_hidden?_Where_IP_addresses_are_already_stored_in_the_da-FAQ_for_developers"></span>Will old IP addresses be hidden? Where IP addresses are already stored in the database, will they be removed? Will it be possible to instantiate a `User` object with an IP address as its name?<span data-mw-comment-end="h-Will_old_IP_addresses_be_hidden?_Where_IP_addresses_are_already_stored_in_the_da-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=21" title="Edit section: Will old IP addresses be hidden? Where IP addresses are already stored in the database, will they be removed? Will it be possible to instantiate a `User` object with an IP address as its name?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>After temporary accounts are enabled, any IP addresses that were visible before enabling temporary accounts will still be visible. </p><p>Those IP addresses will still exist in database tables. </p><p>It will still be possible to instantiate a `User` object with an IP address as its name. </p> <div class="mw-heading mw-heading3"><h3 id="Will_this_increase_the_amount_of_traffic_bypassing_the_Varnish_cache?" data-mw-thread-id="h-Will_this_increase_the_amount_of_traffic_bypassing_the_Varnish_cache?-FAQ_for_developers"><span id="Will_this_increase_the_amount_of_traffic_bypassing_the_Varnish_cache.3F"></span><span data-mw-comment-start="" id="h-Will_this_increase_the_amount_of_traffic_bypassing_the_Varnish_cache?-FAQ_for_developers"></span>Will this increase the amount of traffic bypassing the Varnish cache?<span data-mw-comment-end="h-Will_this_increase_the_amount_of_traffic_bypassing_the_Varnish_cache?-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=22" title="Edit section: Will this increase the amount of traffic bypassing the Varnish cache?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>There should be no effect here, since recent IP editors already bypass the <a href="/wiki/Special:MyLanguage/Manual:Varnish_caching" title="Special:MyLanguage/Manual:Varnish caching">Varnish cache</a><span style="display:none"><a href="/wiki/Manual:Varnish_caching" title="Manual:Varnish caching"> </a></span>. Logged out readers will still hit it. </p> <div class="mw-heading mw-heading3"><h3 id="What_is_mw.config.get('wgUserName')_for_a_temporary_user?" data-mw-thread-id="h-What_is_mw.config.get(&#039;wgUserName&#039;)_for_a_temporary_user?-FAQ_for_developers"><span id="What_is_mw.config.get.28.27wgUserName.27.29_for_a_temporary_user.3F"></span><span data-mw-comment-start="" id="h-What_is_mw.config.get('wgUserName')_for_a_temporary_user?-FAQ_for_developers"></span>What is <code>mw.config.get('wgUserName')</code> for a temporary user?<span data-mw-comment-end="h-What_is_mw.config.get('wgUserName')_for_a_temporary_user?-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=23" title="Edit section: What is mw.config.get(&#039;wgUserName&#039;) for a temporary user?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>This will return the temporary user's name (whereas for an IP user it returns <code>null</code>). This is because temporary users are implemented the same as registered users, and it may be necessary to access their name. </p><p>You can check if a user is temporary in JavaScript via the <code>mediawiki.util</code> and <code>mediawiki.user</code> modules: </p> <ul><li><code>mw.util.isTemporaryUser</code></li> <li><code>mw.user.isTemp</code></li> <li><code>mw.user.isNamed</code></li></ul> <div class="mw-heading mw-heading3"><h3 id="What_is_mw.config.get('wgUserGroups')_for_a_temporary_user?" data-mw-thread-id="h-What_is_mw.config.get(&#039;wgUserGroups&#039;)_for_a_temporary_user?-FAQ_for_developers"><span id="What_is_mw.config.get.28.27wgUserGroups.27.29_for_a_temporary_user.3F"></span><span data-mw-comment-start="" id="h-What_is_mw.config.get('wgUserGroups')_for_a_temporary_user?-FAQ_for_developers"></span>What is <code>mw.config.get('wgUserGroups')</code> for a temporary user?<span data-mw-comment-end="h-What_is_mw.config.get('wgUserGroups')_for_a_temporary_user?-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=24" title="Edit section: What is mw.config.get(&#039;wgUserGroups&#039;) for a temporary user?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>This will return <code>[ "*", "temp" ]</code>. </p> <div class="mw-heading mw-heading3"><h3 id="Can_temporary_users_be_assigned_to_groups,_autopromoted_or_autoconfirmed?" data-mw-thread-id="h-Can_temporary_users_be_assigned_to_groups,_autopromoted_or_autoconfirmed?-FAQ_for_developers"><span id="Can_temporary_users_be_assigned_to_groups.2C_autopromoted_or_autoconfirmed.3F"></span><span data-mw-comment-start="" id="h-Can_temporary_users_be_assigned_to_groups,_autopromoted_or_autoconfirmed?-FAQ_for_developers"></span>Can temporary users be assigned to groups, autopromoted or autoconfirmed?<span data-mw-comment-end="h-Can_temporary_users_be_assigned_to_groups,_autopromoted_or_autoconfirmed?-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=25" title="Edit section: Can temporary users be assigned to groups, autopromoted or autoconfirmed?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>No. None of these are possible for temporary users. </p> <div class="mw-heading mw-heading3"><h3 id="I'm_a_developer_for_a_tool_or_third-party_MediaWiki_extension._How_do_I_let_the_WMF_know_about_my_needs?" data-mw-thread-id="h-I&#039;m_a_developer_for_a_tool_or_third-party_MediaWiki_extension._How_do_I_let_the-FAQ_for_developers"><span id="I.27m_a_developer_for_a_tool_or_third-party_MediaWiki_extension._How_do_I_let_the_WMF_know_about_my_needs.3F"></span><span data-mw-comment-start="" id="h-I'm_a_developer_for_a_tool_or_third-party_MediaWiki_extension._How_do_I_let_the-FAQ_for_developers"></span>I'm a developer for a tool or third-party MediaWiki extension. How do I let the WMF know about my needs?<span data-mw-comment-end="h-I'm_a_developer_for_a_tool_or_third-party_MediaWiki_extension._How_do_I_let_the-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=26" title="Edit section: I&#039;m a developer for a tool or third-party MediaWiki extension. How do I let the WMF know about my needs?"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Please add tasks about your work as subtasks of <a href="https://phabricator.wikimedia.org/T326816" class="extiw" title="phab:T326816">phab:T326816</a>. </p> <div class="mw-heading mw-heading3"><h3 id="PHPUnit_tests_for_my_extension_break_with_temp_accounts_enabled" data-mw-thread-id="h-PHPUnit_tests_for_my_extension_break_with_temp_accounts_enabled-FAQ_for_developers"><span data-mw-comment-start="" id="h-PHPUnit_tests_for_my_extension_break_with_temp_accounts_enabled-FAQ_for_developers"></span>PHPUnit tests for my extension break with temp accounts enabled<span data-mw-comment-end="h-PHPUnit_tests_for_my_extension_break_with_temp_accounts_enabled-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=27" title="Edit section: PHPUnit tests for my extension break with temp accounts enabled"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>See <a href="https://phabricator.wikimedia.org/T365645" class="extiw" title="phab:T365645">phab:T365645</a> and <a href="https://phabricator.wikimedia.org/T365669" class="extiw" title="phab:T365669">phab:T365669</a> for example patches on how to update your tests. </p> <div class="mw-heading mw-heading3"><h3 id="I_have_questions_not_answered_on_this_page" data-mw-thread-id="h-I_have_questions_not_answered_on_this_page-FAQ_for_developers"><span data-mw-comment-start="" id="h-I_have_questions_not_answered_on_this_page-FAQ_for_developers"></span>I have questions not answered on this page<span data-mw-comment-end="h-I_have_questions_not_answered_on_this_page-FAQ_for_developers"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;action=edit&amp;section=28" title="Edit section: I have questions not answered on this page"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>See: </p> <ul><li><a href="/wiki/Trust_and_Safety_Product/Temporary_Accounts/FAQ" title="Trust and Safety Product/Temporary Accounts/FAQ">The general FAQ</a> for basic information about the project, legal information, answers to functionaries' questions, etc.</li> <li><a href="https://phabricator.wikimedia.org/T326816" class="extiw" title="phab:T326816">T326816</a> and <a href="https://phabricator.wikimedia.org/T300263" class="extiw" title="phab:T300263">T300263</a> for more technical details.</li></ul> <p>You may also reach out to us <a href="/wiki/Talk:Trust_and_Safety_Product/Temporary_Accounts" title="Talk:Trust and Safety Product/Temporary Accounts">on the talk page</a>. </p> <!-- NewPP limit report Parsed by mw‐web.eqiad.main‐5dc468848‐lzkns Cached time: 20241122131204 Cache expiry: 2592000 Reduced expiry: false Complications: [show‐toc] DiscussionTools time usage: 0.019 seconds CPU time usage: 0.200 seconds Real time usage: 0.247 seconds Preprocessor visited node count: 883/1000000 Post‐expand include size: 7202/2097152 bytes Template argument size: 2773/2097152 bytes Highest expansion depth: 13/100 Expensive parser function count: 4/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 5912/5000000 bytes Lua time usage: 0.012/10.000 seconds Lua memory usage: 1055241/52428800 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 76.477 1 -total 66.30% 50.708 1 Template:Temporary_Accounts/Header 64.48% 49.315 8 Template:Ll 40.09% 30.659 16 Template:Translatable 30.89% 23.626 8 Template:Pagelang 6.74% 5.156 2 Template:Int 6.10% 4.666 1 Template:TNTN 5.91% 4.520 1 Translations:Extension:AbuseFilter/Rules_format/Page_display_title/en --> <!-- Saved in parser cache with key mediawikiwiki:pcache:idhash:1791658-0!canonical and timestamp 20241122131204 and revision id 6864184. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://www.mediawiki.org/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;oldid=6864184">https://www.mediawiki.org/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;oldid=6864184</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Special:Categories" title="Special:Categories">Category</a>: <ul><li><a href="/wiki/Category:Temporary_Accounts" title="Category:Temporary Accounts">Temporary Accounts</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 22 November 2024, at 12:58.</li> <li id="footer-info-copyright">Text is available under the <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-ShareAlike License</a>; additional terms may apply. Text in <a class="external text" href="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents">the Help: namespace</a> is available under the <a rel="nofollow" class="external text" href="https://creativecommons.org/publicdomain/zero/1.0/">Creative Commons CC0 License</a>. By using this site, you agree to the <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">Terms of Use</a> and <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy Policy</a>.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Project:About">About mediawiki.org</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Project:General_disclaimer">Disclaimers</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/www.mediawiki.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//m.mediawiki.org/w/index.php?title=Trust_and_Safety_Product/Temporary_Accounts/For_developers&amp;mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-gzbbg","wgBackendResponseTime":113,"wgDiscussionToolsPageThreads":[{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Create_temporary_actor_for_your_features","replies":[]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Design_guidelines_around_this_change","replies":[]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-How_should_I_update_my_code?","replies":[{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Questions_you_may_ask_yourself-How_should_I_update_my_code?","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Update_a_check_for_the_type_of_user-How_should_I_update_my_code?","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Anonymous,_Not_logged-in,_Unregistered,_Unnamed?_A_word_on_terminology-How_should_I_update_my_code?","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Creating_a_new_temporary_user-How_should_I_update_my_code?","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Testing_the_onTempUserCreatedRedirect_hook-How_should_I_update_my_code?","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Updating_AbuseFilter_filters-How_should_I_update_my_code?","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Updating_AbuseFilter_permissions-How_should_I_update_my_code?","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Update_documentation-How_should_I_update_my_code?","replies":[]}]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-FAQ_for_developers","replies":[{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-What's_the_change_from_a_technical_perspective?-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-How_can_my_code_check_if_temp_accounts_is_enabled?-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Should_my_tool_treat_temp_accounts_the_same_as_regular_accounts?-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Why_are_temporary_accounts_implemented_so_similarly_to_named_user_accounts,_if_t-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Why_does_User::isRegistered_return_true_instead_of_false_for_a_temporary_account-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Can_our_database_handle_the_increased_number_of_new_accounts_created?-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-What_will_be_stored_in_the_database_instead_of_the_IP_address?-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Where_in_the_database_will_IP_addresses_be_stored?-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Will_old_IP_addresses_be_hidden?_Where_IP_addresses_are_already_stored_in_the_da-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Will_this_increase_the_amount_of_traffic_bypassing_the_Varnish_cache?-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-What_is_mw.config.get('wgUserName')_for_a_temporary_user?-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-What_is_mw.config.get('wgUserGroups')_for_a_temporary_user?-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Can_temporary_users_be_assigned_to_groups,_autopromoted_or_autoconfirmed?-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-I'm_a_developer_for_a_tool_or_third-party_MediaWiki_extension._How_do_I_let_the-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-PHPUnit_tests_for_my_extension_break_with_temp_accounts_enabled-FAQ_for_developers","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-I_have_questions_not_answered_on_this_page-FAQ_for_developers","replies":[]}]}],"wgPageParseReport":{"discussiontools":{"limitreport-timeusage":"0.019"},"limitreport":{"cputime":"0.200","walltime":"0.247","ppvisitednodes":{"value":883,"limit":1000000},"postexpandincludesize":{"value":7202,"limit":2097152},"templateargumentsize":{"value":2773,"limit":2097152},"expansiondepth":{"value":13,"limit":100},"expensivefunctioncount":{"value":4,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":5912,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 76.477 1 -total"," 66.30% 50.708 1 Template:Temporary_Accounts/Header"," 64.48% 49.315 8 Template:Ll"," 40.09% 30.659 16 Template:Translatable"," 30.89% 23.626 8 Template:Pagelang"," 6.74% 5.156 2 Template:Int"," 6.10% 4.666 1 Template:TNTN"," 5.91% 4.520 1 Translations:Extension:AbuseFilter/Rules_format/Page_display_title/en"]},"scribunto":{"limitreport-timeusage":{"value":"0.012","limit":"10.000"},"limitreport-memusage":{"value":1055241,"limit":52428800}},"cachereport":{"origin":"mw-web.eqiad.main-5dc468848-lzkns","timestamp":"20241122131204","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10