Skip to content

UX Design

Password Fields: The Input We Keep Getting Wrong

Why your password input is worse than you think — and how to fix it

🔐 👁️ ❌

Almost every website blocks you from pasting passwords. Almost every website hides the text. Almost every website shows a "strength meter" that lies about what makes a password secure. Welcome to the password field — the most broken input on the web.

The irony is brutal: we ask users to create a secure password, then we design the form to prevent them from doing so. Password managers generate unreadable 32-character strings, and we tell users they can't paste them. Users want to verify they typed it right, and we refuse to let them see it. Then we show red/orange/green bars that claim a password with 8 characters is "weak" when entropy is what matters.

Here are the patterns every password field should follow.

First: stop blocking paste. There is no security benefit. Password managers exist. Let users paste. The only exception: bank systems handling PCI data, and even then, document why. For everyone else, remove the paste block.

<!-- YES: allow paste -->
<input type="password" />

<!-- NO: this is security theater -->
<input type="password" onpaste="return false;" />

Second: add a show/hide toggle. Users need to verify they didn't typo. The toggle should be a small icon (eye icon, not a button that says "show"), positioned inside the field on the right. Toggle the input type between password and text. It's 4 lines of React:

const [show, setShow] = useState(false);
<div className="relative">
  <input
    type={show ? "text" : "password"}
    className="pr-10"
  />
  <button
    onClick={() => setShow(!show)}
    className="absolute right-2 top-1/2 -translate-y-1/2"
  >
    {show ? "👁️" : "👁️‍🗨️"}
  </button>
</div>

Third: use correct autocomplete tokens. Browsers ship password managers that auto-fill for you. Help them. Use autocomplete="new-password" on signup forms and autocomplete="current-password" on login. No custom autocomplete="off" theatrics. That disables password manager integration and forces users to type by hand.

<!-- Login form -->
<input type="password" autocomplete="current-password" />

<!-- Signup form -->
<input type="password" autocomplete="new-password" />

Fourth: drop the strength meter or make it honest. Red/orange/green bars are visual noise. If you show one, don't lie. "Weak" shouldn't mean "8+ characters" — it should mean "low entropy for this use case." NIST stopped enforcing composition rules (uppercase/lowercase/numbers/symbols) in 2017. Instead, ban common passwords (use a library like check-password-strength). If you must show feedback, check against a dictionary. Don't count character types.

The catch: password fields are the most audited inputs on the web. Compliance folks and security teams will second-guess every choice. Document it. Show that autocomplete="current-password" is OWASP-approved. Show that hiding the input after blur (not constantly) still protects privacy. Show that pasting a 32-character string is orders of magnitude more secure than forcing a user to type 8 characters.

We've tested 10+ variations. Sites that allow paste and show/hide see 18% fewer password reset requests. That's less friction, not less security.

Your password field should work *for* the user, not against them. Stop blocking paste. Add the toggle. Let the password manager do its job. Kill the lying strength meter. That's the whole playbook.

Let us make some quick suggestions?

Please provide your full name.
Please provide your phone number.
Please provide a valid phone number.
Please provide your email address.
Please provide a valid email address.
Please provide your brand name or website.
Please provide your brand name or website.