| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Lines of code | 169 |
| Technical Name |
no_password_toggle |
| License | OPL-1 |
| Website | https://www.oudayet.com |
| Versions | 16.0 17.0 18.0 19.0 |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Lines of code | 169 |
| Technical Name |
no_password_toggle |
| License | OPL-1 |
| Website | https://www.oudayet.com |
| Versions | 16.0 17.0 18.0 19.0 |
Password Toggle
A show/hide eye-icon toggle on every Odoo password field â backend and login, zero configuration
Odoo 19 $5 USD Zero ConfigWas That Password Right?
Standard Odoo password fields show only dots. Mistype a long API token, a special-character secret, or a paste with trailing whitespace and you'll only know after the save fails â or worse, after the integration silently breaks.
Without this module
Type 32 characters, hope they're right, hit Save, hope the integration works. No way to verify visually.
With this module
One click on the eye icon and the value appears. Verify it. Click again to hide. Done.
Four Things It Does Well
Lightweight, focused, no configuration.
Click to reveal, click to hide. The icon flips between fa-eye and fa-eye-slash so the current state is always obvious.
Install and every field with password="True" gets the toggle automatically. No XML to edit, no per-field setup.
A separate publicWidget attaches the same toggle to the public login form. Users get the eye icon before they even sign in.
An OWL patch() on the standard CharField component. No Python, no RPC, no database changes.
Read-only password fields stay read-only â the toggle only renders when the field is editable.
Real-World Scenarios
A 64-character Stripe / OpenAI / SMTP token is hard to verify in dots. The toggle lets the admin reveal it once before saving, catch a stray space, then hide it again.
Mobile users, users with sticky keys, or users in a low-light setting can briefly toggle the password before pressing Log in â fewer wrong-password lockouts.
Any custom field declared as password="True" in any module gets the toggle for free. No view extension, no widget rewrite.
Outgoing-server SMTP password not sending mail? Reveal it once, double-check it matches the provider, hide it back. Saves a support ticket.
How It Works
An OWL patch() on CharField.prototype adds a reactive passwordState when props.isPassword is true.
A QWeb xpath inserts a <button> after the <input> with the FontAwesome eye icon â only when the field is editable.
The click handler resolves the underlying <input> via three fallbacks and flips its type between text and password.
Installation
Two steps. No Python dependencies, no database migration, no configuration.
Step 1 - addons path
Drop the module inPlace the no_password_toggle folder in any directory listed in your Odoo addons_path.
Step 2 - in Odoo
Install the moduleApps menu → remove the Apps filter → search "Password Toggle" → Install. Every password field â backend and login â picks up the eye icon immediately.
Works With Every Password Field
No allow-list. No per-field setup. Anything declared password="True" on any model is covered.
Non-password Char fields are unaffected â the patch only fires when props.isPassword is true.
What This Module Doesn't Do
Honest scope. Here's what's out of reach.
A password="True" field that's also readonly="True" is rendered as static text â there's no input to toggle.
If a field uses a non-CharField widget (e.g. widget="something_custom"), the patch never fires â only standard CharFields are extended.
The toggle only switches the rendering of the value the user typed. It cannot reveal an already-saved password â Odoo hashes those server-side.
The toggle is shown to every user with edit access to the field. There's no per-user toggle to hide it (it auto-hides on read-only fields).
Two modules patching CharField.prototype coexist via super.setup(); only conflicts arise if both modify the same xpath inside the QWeb template.
A theme that replaces oe_login_form entirely will need its own integration point. Standard login pages and Web Studio variants are covered.
🛡 A Note on What "Show" Means
The toggle flips the input type attribute between "password" and "text" â that's a pure browser-side render switch on the value the user has typed in this session. Nothing is unhashed, nothing is fetched from the server, and the original value is not stored anywhere new. When the field is saved, Odoo applies its usual hashing pipeline. If the field is later re-opened it shows blank dots like before. Treat the eye icon as "let me re-read what I just typed", not as "let me see what's already stored".
FAQ
No. The toggle only re-renders the value the current user typed during this edit session. Already-saved Odoo user passwords are hashed server-side and never returned to the client â there's nothing to reveal.
Yes. A separate publicWidget attaches to .oe_login_form on the public login page, since login pages don't load OWL.
Multiple modules can patch() CharField.prototype simultaneously â that's the supported pattern. The patched setup() calls super.setup() first so prior overrides keep working.
This branch targets Odoo 19. Earlier-version branches (16.0, 17.0, 18.0) ship the same module with version-appropriate adaptations to the OWL/asset framework. Each branch has its own JS test suite.
The button has aria-label="Toggle password visibility" and tabindex="-1" so it doesn't disrupt the form's natural tab order. Click and screen-reader access work; the keyboard tab path is unchanged.
It uses the public patch() utility on the standard CharField component. As long as CharField stays in the same module path with props.isPassword available, the module keeps working. The shipped JS test suite catches regressions on each version branch.
Technical Details
patch() on CharField.prototype + publicWidget on oe_login_form
Password Toggle - $5 USD, Odoo 19
© Naim OUDAYET - OPL-1 License
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module