3.3.8 Level AA Guideline 3.3 Input Assistance Added in WCAG 2.2 Partly detectable automatically

Accessible Authentication (Minimum)

A cognitive function test such as remembering a password or solving a puzzle is not required for any authentication step, unless an alternative method exists, a mechanism assists the user, or the test is object recognition or personal non-text content.

Who this affects

Users with cognitive disabilities affecting memory, reading, or numeracy. Users with dyslexia facing a distorted-text CAPTCHA. Blocking password managers by disabling paste turns a minor barrier into an impassable one.

The failure and the fix

Each example below is a self-contained page, loaded in a frame so its markup cannot affect this page. Open either one on its own to test it with a keyboard or screen reader.

Fails 3.3.8

Open the failing example in a new tab

fail.html — the problem

<h1>Sign in</h1>

<form>
  <div class="field">
    <label for="u">Email address</label>
    <!-- FAILURE 1: no autocomplete token, so a password manager cannot fill it. -->
    <input type="email" id="u">
  </div>

  <div class="field">
    <label for="p">Password</label>
    <!-- FAILURE 2: paste is blocked. This is usually added "for security", but
         it does the opposite: it forces people to choose passwords they can
         remember and retype, and it breaks every password manager. For a user
         with a memory or motor disability it can make the account unreachable. -->
    <input type="password" id="p" onpaste="return false" autocomplete="off">
  </div>

  <!-- FAILURE 3: a transcription CAPTCHA. Reading distorted text is a cognitive
       function test - exactly what 3.3.8 prohibits - and there is no
       alternative offered. -->
  <div class="captcha">
    <p>Type the characters you see:</p>
    <p><span class="distorted" aria-hidden="true">x7Kp9m</span></p>
    <div class="field">
      <label for="c">Characters</label>
      <input type="text" id="c">
    </div>
  </div>

  <button type="submit" class="button">Sign in</button>
</form>

Meets 3.3.8

Open the passing example in a new tab

pass.html — the fix

<h1>Sign in</h1>

<form>
  <div class="field">
    <label for="u">Email address</label>
    <!-- FIX 1: the correct autocomplete tokens let the browser and any password
         manager fill both fields. This is the single highest-value change on
         the page, and it also satisfies 1.3.5 Identify Input Purpose. -->
    <input type="email" id="u" autocomplete="username">
  </div>

  <div class="field">
    <label for="p">Password</label>
    <!-- FIX 2: paste works. Never block it. -->
    <input type="password" id="p" autocomplete="current-password">
  </div>

  <button type="submit" class="button">Sign in</button>
</form>

<!-- FIX 3: an authentication route with no cognitive function test at all.
     A one-time link sent by email requires no recall and no puzzle. -->
<div class="alt">
  <h2>Or sign in without a password</h2>
  <p>We will email you a link that signs you in. Nothing to remember, nothing to type.</p>
  <button type="button" class="button button--secondary">Email me a sign-in link</button>
</div>

<!-- No CAPTCHA. If you must have one, 3.3.8 allows only:
       - object recognition ("select all the images with a bus"), or
       - identifying non-text content the user provided themselves,
     and even those are removed at AAA by 3.3.9. Better options exist:
     server-side risk scoring, rate limiting, or a hardware/passkey factor -
     none of which ask the user to prove anything with their memory.

     Note that "remember your password" is itself a cognitive function test.
     It is permitted only because the password manager route is available -
     which is exactly why breaking password managers breaks conformance. -->

How to test it

Check every authentication step. Confirm paste is permitted in password fields, autocomplete tokens are present so password managers work, and any CAPTCHA offers a non-cognitive alternative. Transcribing a code from another device also fails if it cannot be pasted.

  • Automated

    Missing autocomplete tokens on credential fields are detectable, but whether a cognitive function test is required must be assessed by hand.

    This demo's failure is not machine-detectable. autocomplete="off" is a perfectly valid token, so axe's autocomplete-valid rule is satisfied by it. Blocking paste with onpaste="return false", and requiring a transcription CAPTCHA, are both invisible to every scanner - yet they are what actually locks people out of their accounts.

    Relevant axe rules:

    • autocomplete-valid
  • Keyboard

    Unplug the mouse. Move through the page with Tab, Shift+Tab, Enter, Space and the arrow keys. See the keyboard testing script.

  • Screen reader

    Listen to both examples with NVDA, JAWS, VoiceOver or TalkBack and compare what is announced. See the screen reader cheat sheets.

  • Visual

    Zoom to 200% and 400%, narrow the viewport to 320 px, and apply the text-spacing overrides. See the visual testing procedures.

In the specification