Skip to content
WordPress.org

Ch’ti

  • Themes
  • Plugins
  • About
  • Get WordPress
Get WordPress
WordPress.org

Plugin Directory

Tomevexa Secure Login

  • Submit a plugin
  • My favorites
  • Log in
  • Submit a plugin
  • My favorites
  • Log in

Tomevexa Secure Login

By Francesco La Mancusa
Download
  • Details
  • Reviews
  • Installation
  • Development
Support

Description

Compatible with WordPress 5.8 and later. The minimum PHP version remains 7.4 to preserve secure, predictable authentication behavior across supported installations.

Tomevexa Secure Login is distinguished by its privacy-preserving adaptive security model. It can require an additional email OTP after a correct password when a non-administrator signs in from a network that has not yet been trusted.

The plugin also provides a front-end login form that can authenticate eligible WordPress users with a one-time numeric code sent to their account email address.

The plugin also provides optional password login, configurable password-expiry enforcement, and a local adaptive step-up mode for non-administrator accounts. When adaptive step-up is enabled, a correct password from a network that has not yet been trusted requires an email OTP before access is granted. Administrator accounts remain excluded from the plugin OTP path and password-expiry enforcement.

Main features:

  • Passwordless email OTP login for non-administrator users.
  • Local device-passkey login using WebAuthn/FIDO2, with Face ID, Touch ID, Windows Hello, device PINs, and supported Android authenticators.
  • Email-first passkey sign-in using the device authenticator; up to 10 passkeys can be registered per WordPress account. USB/NFC keys can be registered and managed, but the current front-end sign-in flow requests internal authenticators only.
  • Passkey private keys and biometric data never reach WordPress; the plugin stores only credential identifiers, public-key coordinates, counters, and timestamps.
  • Configurable OTP length, lifetime, resend delay, and maximum verification attempts.
  • Generic code-request responses to reduce account enumeration.
  • OTP request throttling per IP and email address. Failed-password limits apply to an email/IP pair in a 15-minute window; account and IP counters also provide administrator diagnostics and alerts.
  • OTP values generated with random_int() and stored only as WordPress password hashes in temporary transients.
  • Optional password login from the same front-end form.
  • Adaptive step-up authentication: after a correct password, unfamiliar networks can require email OTP verification before access is granted.
  • Privacy-preserving trusted-network recognition: IPv4 /24 or IPv6 /64 network prefixes are converted to salted HMAC hashes; raw IP addresses are not stored in the trusted-network list.
  • Configurable trusted-network lifetime, with automatic expiry and a maximum of 10 active hashes per user.
  • Configurable password expiry for non-administrator accounts; set the value to 0 to disable it.
  • Safe post-login redirects, including optional compatibility with Profile Builder Pro custom redirects when that plugin is active.
  • Accessible labels, keyboard-operable controls, live status/error regions, visible focus indicators, one-time-code autocomplete, and reduced-motion support.
  • No external JavaScript, CSS, tracking, telemetry, or third-party API calls.
  • Translation support through the WordPress.org translation system. Some Profile Builder accessibility labels currently use Italian text.
  • Independently configurable password, email-code, and passkey methods; disabling email OTP also disables adaptive email step-up.
  • Front-end passkey management with [tomevexa_passkeys] and an optional device-passkey setup invitation after password or email-code login.
  • Daily password-renewal reminders, latest email send/verification status, and an inactive-profile report using Tomevexa activity and valid WP Last Login timestamps.
  • Optional integration with existing All-In-One Security (AIOS) network lockouts and Profile Builder account approval.

Use the [tomevexa_secure_login] shortcode on a page. You can optionally set a redirect destination:

[tomevexa_secure_login redirect_url="https://example.com/account/"]

The redirect is validated with WordPress redirect-safety functions. If a redirect_to parameter is supplied by WordPress, the plugin can also honor that safe destination.

Email delivery

OTP messages are sent with the standard WordPress wp_mail() function. Actual delivery therefore depends on the site’s WordPress mail configuration and hosting environment. The plugin does not connect directly to an external email service.

Profile Builder compatibility

Profile Builder is not required. When Profile Builder Pro is active and its Custom Redirects module is enabled, Tomevexa Secure Login preserves the configured after-login redirect.

Accessibility

The login form uses semantic labels and buttons, keyboard-operable controls, visible focus indicators, polite and assertive live regions for status and errors, a single numeric OTP field compatible with paste and autocomplete="one-time-code", and reduced-motion support.

Accessibility also depends on the active theme and surrounding page content. Site owners should test the completed page with keyboard navigation and their preferred assistive technologies.

Privacy

Tomevexa Secure Login does not include analytics, telemetry, advertising, or direct third-party API requests. Passkey registration and verification are performed locally between the browser/authenticator and the WordPress site using WebAuthn; no external authentication service is required. OTP emails are sent through the site’s configured WordPress mail system. Temporary OTP data is stored in WordPress transients and contains a password hash of the OTP, the user ID, expiry time, and attempt count. The OTP itself is not stored in plaintext. When adaptive step-up is enabled, trusted-network recognition stores only salted HMAC hashes derived from reduced network prefixes plus their expiry times in user metadata; the trusted-network list does not store raw IP addresses. For administrator troubleshooting, the latest IP used with an email after a failed password attempt is stored in a transient for 15 minutes. Login result reason codes, keyed by a salted email HMAC, are retained for up to 24 hours. Up to 20 block alerts containing the attempted email and IP are stored for at most 24 hours or until an administrator archives them. The plugin also stores the last observed authenticated activity timestamp in user metadata, updated at most once per day, and the most recent email send/OTP verification status for administrator review. The plugin-owned user metadata and settings are retained on uninstall by default. Administrators can instead save the permanent-cleanup choice before deleting the plugin; that choice removes the settings, six plugin-owned user metadata types, and plugin-owned database transients. Short-lived diagnostics and challenges use WordPress transients and expire according to their configured lifetimes. The browser stores a localStorage preference, keyed by an encoded email address, when the user dismisses the passkey setup invitation; clearing the site data removes that preference.

Installation

  1. Upload the tomevexa-secure-login folder to /wp-content/plugins/, or install the ZIP file from the WordPress Plugins screen.
  2. Activate Tomevexa Secure Login.
  3. Open Settings > Tomevexa Secure Login.
  4. Configure code length, validity, resend delay, maximum attempts, adaptive step-up, trusted-network lifetime, password expiry, and the email template.
  5. Add [tomevexa_secure_login] to the page that should provide the login form.
  6. Make sure the site uses HTTPS if passkey support will be used.
  7. Each user who wants to use a passkey can open their WordPress Profile and use the Passkey Tomevexa section to register a device passkey. A front-end manager is also available through [tomevexa_passkeys].
  8. Exclude the login and password-recovery pages from full-page caching. JavaScript is required for the Tomevexa login form.
  9. If desired, create effettua-il-login with exactly [tomevexa_secure_login] as its page content. This enables the dedicated login route used by public login links and the WooCommerce account landing-page integration.
  10. Optional Profile Builder integration uses the registrati and resetta-password page slugs. The isolated password-recovery page is enabled only when the wppb-recover-password shortcode is available.
  11. Log out and test every enabled authentication path before using the plugin on a production login page: password, email OTP, adaptive step-up, and device-passkey login as applicable. Keep the standard administrator login and recovery route available.

FAQ

Does the plugin require Profile Builder?

No. Tomevexa Secure Login works with standard WordPress users. Profile Builder Pro integration is limited to preserving its optional custom after-login redirect when available.

Can administrators log in with an OTP?

No. Administrator accounts are deliberately excluded from the OTP path and from password-expiry enforcement. They can continue to use standard WordPress password authentication.

Do passkeys require an external service?

No. Passkey registration and authentication use the browser WebAuthn API and are verified locally by the WordPress site. HTTPS and PHP OpenSSL support are required. Private keys and biometric data remain on the user device.

How do I register a passkey?

While logged in, open your WordPress user Profile and find the Passkey Tomevexa section. Select Registra questo dispositivo for Windows Hello, Windows PIN, Face ID, Touch ID, or Android device verification. Select Registra una chiave di sicurezza for a USB/NFC security key. Passkey registration requires HTTPS, PHP OpenSSL support, and a WebAuthn-capable browser/authenticator. Up to 10 passkeys can be registered for one WordPress account. The current front-end login asks for the account email and requests internal device authenticators; USB/NFC and hybrid QR-code sign-in are not offered by this flow.

Where are passkey credentials stored?

The authenticator keeps the private key. WordPress stores the credential identifier and public-key material required to verify future sign-ins, together with the authenticator counter and timestamps. The plugin does not receive or store biometric data.

Can administrators use passkeys?

Yes. The administrator exclusion applies to the email OTP path and password-expiry enforcement. An administrator may register and use a passkey from the WordPress user profile.

What happens if a passkey is unavailable?

The existing WordPress password login remains available. Eligible non-administrator users can also use the plugin email OTP flow. Site owners should keep an appropriate recovery method available for privileged accounts.

What is adaptive step-up authentication?

When enabled, a non-administrator who enters the correct password from a network that has not yet been trusted must also enter an email OTP. After successful OTP verification, a salted hash representing that network can be trusted for the configured period.

Does adaptive step-up store my IP address?

The trusted-network list does not store raw IP addresses. The plugin reduces the current address to an IPv4 /24 or IPv6 /64 network prefix and stores a salted HMAC hash of that prefix. The web server and other WordPress components may still process or log IP addresses independently of this plugin.

Are OTP codes stored in plaintext?

No. The generated code is hashed with WordPress password-hashing functions before temporary storage.

What happens when a password expires?

A non-administrator who attempts password authentication with an expired password is directed to reset it. Email OTP login remains available. Set password expiry to 0 in the plugin settings to disable this feature.

Does the plugin guarantee email delivery?

No. It uses WordPress wp_mail(). Delivery depends on the site’s mail configuration, hosting environment, and any SMTP or mail-delivery plugin in use.

What changes when upgrading from 1.1.0?

Existing plugin settings, trusted-network metadata, and passkey public keys use the same storage names. New method switches default to enabled when absent from older settings. The current passkey login is email-first and requests the device authenticator, so an external security key registered in 1.1.0 is retained but is not offered by the current front-end login. Users can register a device passkey after signing in with another enabled method.

Which pages use the dedicated templates?

A logged-out page containing exactly [tomevexa_secure_login] uses the isolated login template. A shortcode with attributes or additional content keeps the normal theme template. Public login links and the WooCommerce account landing page use the dedicated route only when effettua-il-login contains the exact shortcode. The resetta-password page uses the isolated recovery template when Profile Builder recovery is available; registrati and resetta-password receive the Profile Builder accessibility enhancements.

The isolated login page outputs only the plugin assets and does not run the normal theme wp_head/wp_footer hooks. Theme navigation, consent banners, and other plugin scripts may therefore be absent on that page. Check required integrations before enabling this route.

Does the plugin inherit another plugin’s two-factor authentication?

Do not assume so. Tomevexa provides its own authentication endpoints. Its password endpoint calls wp_authenticate_username_password, which runs wp_authenticate_user checks, rather than the complete global authenticate filter chain. Email-code and passkey endpoints use their own identity verification. Profile Builder approval and existing AIOS lockouts are checked explicitly. Verify any separate 2FA or access-policy integration; use the standard WordPress login when that integration is required.

What does the inactive-profile report mean?

Users > Profili inattivi shows profiles inactive for more than 12 months and profiles with unknown activity, with 50 entries per page. It uses the newer valid timestamp from Tomevexa authenticated activity and WP Last Login. A missing timestamp does not prove inactivity, and inactivity does not prove that an email address is abandoned.

What do email status and password reminders prove?

An accepted wp_mail() call does not prove delivery. A successfully verified OTP proves access to the mailbox at that moment. The settings page shows the latest status for the 100 newest users. Daily WP-Cron reminders target non-administrators with a recorded password-change timestamp when renewal is due within seven days or overdue. Each timestamp is attempted once, including failed sends, with a maximum of 100 reminder attempts per run; users without that timestamp are not selected. WP-Cron execution depends on the site’s cron configuration.

Can I choose whether uninstall keeps my data?

Yes. Before deactivating and deleting the plugin, open Settings > Tomevexa Secure Login > Dati alla disinstallazione, or follow the Dati alla disinstallazione link in the active plugin row. Select either Conserva i dati per una futura reinstallazione or Elimina definitivamente tutti i dati del plugin, then save. WordPress runs uninstall without an interactive plugin prompt, so this choice must be saved first.

Keeping data is the default, including upgrades from versions without this setting. Deactivation always keeps the data. Deletion always stops the reminder schedule. If permanent cleanup was chosen, deletion removes the plugin settings, passkey public credentials, trusted-network records, password-change and reminder timestamps, email status, observed activity, OTP and challenge transients, diagnostic counters, and block alerts stored in the WordPress database. Accounts, passwords, WP Last Login history, AIOS data, and Profile Builder data are preserved. Passkeys will need to be registered again after permanent cleanup. Existing credential data on the authenticator itself are not deleted remotely.

Dynamic transients held by an external object cache expire at their original TTL; the plugin does not flush a shared cache. Browser localStorage preferences and cookies are outside the WordPress database; users can clear them through browser site-data controls. The cleanup operates on the current site’s option table and plugin-owned user metadata; a network-wide multisite cleanup has not been validated.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Tomevexa Secure Login” is open source software. The following people have contributed to this plugin.

Contributors
  • Francesco La Mancusa

Translate “Tomevexa Secure Login” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

1.3.25

  • Fix interpolated i18n placeholders in password-renewal emails and prepare inactive-profile count and row queries directly.
  • Document the read-only login-screen flags and trusted AIOS table identifier used for WordPress 5.8 compatibility.
  • Align the description, FAQ, privacy information, and upgrade guidance with the current PHP and JavaScript behavior, including email-first device-passkey login.
  • Document dedicated page slugs, optional integrations, reminder limits, and the scope of third-party authentication checks.
  • Refresh the plugin directory icon with matching 128px and 256px assets.
  • Add an explicit uninstall data-retention choice. Preserve data by default; remove plugin settings, user metadata and database transients only when permanent cleanup was selected. Stop the reminder schedule in both cases.

1.3.24

  • Resolves WordPress.org Plugin Check i18n, input-sanitization, naming, and database-query notices.
  • Adds WordPress.org icon assets for the plugin listing.
  • Keeps the existing authentication behavior while tightening code-quality annotations and query construction.

1.3.23

  • Clear the login form fields when a page is entered or left, including back-forward browser restoration, to avoid reusing an old visible entry.
  • Remove Tomevexa’s password verification cookie on WordPress logout; retain standard browser password manager behavior.

1.3.22

  • Detect an exact duplicate email in the Tomevexa form and explain it without submitting a password attempt.
  • Reject repeated email input on the AJAX endpoint before AIOS failed-login reporting and record a short-lived diagnostic reason for administrators.

1.3.21

  • Display the Profile Builder password recovery and new-password steps in a simple, accessible page without the theme header or skip-link focus handlers.
  • Retain the original Profile Builder shortcode, its validation and submit behavior, plus WordPress head and footer hooks for its assets and integrations.

1.3.20

  • Improve Profile Builder registration labels for the phone number and biography, the password visibility button, and mobile input autofill hints.
  • Give the public registration and password reset forms visible focus and touch sized controls while retaining Profile Builder’s native submission and validation.

1.3.19

  • Send visitors from the WooCommerce account landing page to the shared Tomevexa login; after authentication, apply Profile Builder role redirects before the requested account destination.
  • Apply account approval and existing AIOS IP locks to email-code and passkey sign-ins as well as password sign-ins.
  • Give passkey sign-ins the same Profile Builder redirect path used by password and email-code sign-ins.

1.3.18

  • Apply existing AIOS network lockouts to every password attempt through Tomevexa, including approved members.
  • Notify the standard WordPress failed-login hook when the email is unknown or the password is wrong, so AIOS can receive these attempts from the Tomevexa form.

1.3.17

  • Give the email-code request, code confirmation, and password buttons separate native button click actions for VoiceOver; Enter in the code or password field invokes the matching action.
  • Remove forced focus changes after sending a code, allowing the screen reader to remain on its chosen control.
  • Keep AIOS network lockouts on the administrator password path; member login uses Tomevexa’s own rate limits and adaptive email code, so a lock from the renamed WordPress login cannot block a valid member on the dedicated route.
  • Keep the public login link and administrator login guidance introduced in 1.3.16.

1.3.16

  • Point public WordPress login links to the dedicated Tomevexa form while retaining administrator and forced reauthentication paths.
  • Add an accessible link to the member login above the renamed WordPress administrator login form, including after an error.
  • Leave the administrator form and its security controls available; the new link guides members to the separate form.

1.3.15

  • Route logged-out visitors on the WooCommerce account landing page to the single Tomevexa login form.
  • Return those visitors to the account page after login, preserving WooCommerce account features and password-reset endpoints.
  • Leave WooCommerce itself and checkout behavior unchanged.

1.3.14

  • Fetch a fresh public login nonce for each authentication request, avoiding expired page-cache copies.
  • Clear a rejected password field and explain how to replace an outdated browser-saved password.
  • Show administrators the last 24-hour password-login outcome for a supplied email: unknown email, password mismatch, security lock, pending approval, or other authentication refusal.
  • Keep separate timestamps for the last rejected attempt and last verified password so a successful administrator test does not erase the user’s failure diagnosis.
  • Store only short-lived reason codes under salted email hashes; never record passwords or their hashes.

1.3.13

  • After confirming a correct password, report Profile Builder accounts awaiting approval separately from invalid credentials.
  • Preserve Profile Builder approval checks and keep the account state private from callers with an incorrect password.
  • Clear Tomevexa’s failed-password counters for an approved-password submission awaiting account review.
  • Respect active All-In-One Security network lockouts on the custom AJAX password form and announce the local retry time instead of treating the lock as a wrong password.

1.3.12

  • Render shortcode-only login pages in an isolated document for logged-out visitors, without theme scripts or modal focus handlers.
  • Keep the site’s ordinary theme on other pages and on the passkey management view after login.
  • Let the email keyboard’s Return key move into the password field rather than implicitly submitting the first action.
  • Stop removing the consent dialog with JavaScript after it has initialized.

1.3.11

  • Record completed password resets and password changes made from the user profile when calculating expiry.
  • Permit a correct password to clear an earlier failed-attempt block immediately after a reset.
  • Distinguish a correct password rejected by another authentication check from invalid credentials.
  • Preserve the VoiceOver editing cursor on field errors and remove the competing submit-button mutation observer.

1.3.10

  • Quando la coppia email/IP raggiunge il limite di tentativi errati, il modulo avvisa immediatamente l’utente e mostra in orario del sito l’inizio e la fine della finestra di 15 minuti.

1.3.9

  • Il messaggio dopo una password corretta da una rete non ancora attendibile spiega la verifica tramite codice email e mostra la durata configurata della fiducia per quella rete.

1.3.8

  • L’elenco inattivi usa anche i timestamp già presenti di WP Last Login e considera la data più recente tra ultimo accesso e attività autenticata. Valori assenti, vuoti e zero restano nella scheda attività sconosciuta.

1.3.7

  • Registra l’ultima attività autenticata (al massimo una scrittura al giorno per utente) e mostra in Utenti, e nel menu Profile Builder quando disponibile, l’elenco paginato dei profili inattivi da oltre 12 mesi.
  • I profili senza attività registrata restano in una scheda separata: lo storico precedente all’installazione non è ricostruibile e nessun profilo viene cancellato automaticamente.

1.3.6

  • I blocchi per credenziali errate sono limitati alla coppia email/IP (8 errori in 15 minuti); la soglia IP segnala all’amministratore un’anomalia della rete condivisa senza bloccare gli altri account.
  • Invio di un promemoria per rinnovare la password nei sette giorni precedenti la scadenza o dopo la scadenza, una volta per ciclo password. La pianificazione usa WP-Cron e richiede traffico al sito o un cron di sistema configurato.
  • Nelle impostazioni sono mostrati gli ultimi 100 utenti e l’esito disponibile dell’email: codice verificato, invio accettato o invio fallito. L’invio accettato non dimostra la consegna; per riconoscere indirizzi abbandonati servono gli eventi di rimbalzo del provider email.

1.3.5

  • Bind password-expiry session state to the newly issued WordPress session token after login, including standard WordPress password sign-ins.

1.3.4

  • Proposes the IP from the most recent failed password attempt when an administrator looks up an email; it expires after 15 minutes.
  • Shows recent account and IP lockout alerts in the plugin settings, with an archive control and automatic expiry within 24 hours.
  • Updates the privacy description for the temporary troubleshooting data.

1.3.3

  • Added configurable failed-password thresholds for each account and IP in Settings → Tomevexa Secure Login.
  • Added an administrator-only lookup and reset for a specified email or IP, with a nonce and automatic expiry information.

1.3.2

  • Count only failed password checks toward the per-account and shared-IP login limits; successful logins no longer lock out other users on the same network.
  • Explain when a valid password requires a reset or an additional email code, and report an email-code transport failure after a successful password check.
  • Includes the 1.3.1 login order and email autocomplete changes.

1.3.1

  • Ordered the login choices as password, temporary-code continuation, and passkey, followed by the temporary-code verification controls.
  • Marked the account email field as the username for password managers and added iOS email-entry hints without changing its native email input type.

1.3.0

  • Kept the temporary-code and password controls in the accessibility tree from initial page load instead of revealing them dynamically.
  • Removed the password disclosure control so VoiceOver can reach the native password field directly.
  • Preserved a linear email, temporary-code, password, and passkey reading order for iOS VoiceOver without Screen Recognition.

1.2.9

  • Restored the submit type after legacy page snippets rewrite the login buttons during DOMContentLoaded.
  • Added a guard for the three primary login actions so VoiceOver activation remains reliable even if an external snippet changes native submit semantics again.

1.2.8

  • Made the current authentication action submit the form so VoiceOver users can use the Return/Go key while editing email, code, or password fields.
  • Delayed OTP field disclosure and focus until the code request succeeds, avoiding duplicate focus changes and virtual-cursor interruptions.
  • Made password and temporary-code modes mutually exclusive and exposed the current disclosure state consistently.
  • Added explicit, associated error feedback when passkey login is requested without a valid email address.
  • Consolidated passkey login into the main interaction controller to prevent competing click and live-region updates.
  • Replaced the non-modal passkey-choice dialog semantics with a labelled region matching its inline behavior.
  • Kept the email field enabled when passkey is the only configured authentication method.

1.2.7

  • Removed the synthetic touch, click, and focus-redirection handlers from the email, temporary-code, and password inputs so VoiceOver can activate the native controls directly.
  • Removed the WebAuthn autocomplete token from the email field; passkey login remains available through its dedicated button.
  • Suppressed the modal Complianz cookie banner on the dedicated login page because its focus trap could prevent VoiceOver from reaching the form and redirect focus to “Vai al contenuto”.
  • Non-essential cookies remain blocked by Complianz until the visitor gives consent elsewhere on the site.

1.2.6

  • Removed redundant aria-describedby associations and hidden helper descriptions that VoiceOver announced repeatedly.
  • Simplified field labels to “Inserisci la tua mail”, “Inserisci il codice temporaneo”, and “Inserisci la password”.
  • Each action button now exposes only one concise accessible name.
  • Removed bulk dialog descriptions so its explanatory paragraphs are encountered once in normal reading order.
  • Added cleanup for descriptions injected by legacy WPCode login-accessibility snippets.
  • Extended the VoiceOver skip-link focus safeguard to the email, temporary-code, and password fields.

1.2.5

  • Reordered the login form into a single predictable vertical sequence for VoiceOver, JAWS, NVDA, keyboard users, and low-vision users.
  • The controls now appear as Continue, password-panel opener, password confirmation, and passkey login; revealed fields remain adjacent to the control that opened them.
  • Added a native password visibility control with “Mostra password” and “Nascondi password” states.
  • Added explicit screen-reader descriptions for every authentication action.
  • Temporary-code and password fields receive focus as soon as they are revealed, using the numeric or password keyboard configured by the device.
  • Removed decorative “or” separators that interrupted linear screen-reader navigation.
  • Added label normalization so legacy WPCode accessibility snippets cannot overwrite the new button names.

1.2.4

  • Fixed passkey creation immediately after password or email-code login.
  • The passkey-registration nonce is now requested only after the browser has accepted the new WordPress login cookie, so it is bound to the active session token.
  • Added a dedicated authenticated setup-context endpoint with HTTPS and feature-state checks.

1.2.3

  • Replaced the automatic passkey-setup redirect with an explicit post-authentication choice.
  • Users without a passkey receive an accessible explanation and can choose either “Sì, crea una passkey” or “No, continua senza passkey”.
  • Choosing Yes opens the current device’s native Windows Hello, PIN, Face ID, Touch ID, or Android biometric registration prompt before completing the redirect.
  • Choosing No completes login and remembers the decision in that browser until its site data are cleared.
  • Added screen-reader descriptions, focus management, and assertive status announcements for JAWS, NVDA, and VoiceOver.
  • Added a targeted iPhone VoiceOver focus safeguard for the email field to prevent an unintended jump to the page’s “Vai al contenuto” link.

1.2.2

  • Added a front-end passkey manager through the [tomevexa_passkeys] shortcode.
  • Logged-in users who revisit a page containing [tomevexa_secure_login] now see the passkey setup interface instead of a generic already-logged-in message.
  • After a successful password or email-code login, users without a passkey are returned automatically to the setup interface.
  • Users can register the current device with Windows Hello, device PIN, Face ID, Touch ID, or Android biometrics without access to the WordPress administration area.
  • The front-end manager also lists and removes registered passkeys and keeps USB/NFC security-key registration as a separate explicit choice.

1.2.1

  • Passkey login now uses the email address to request only the account’s registered on-device credentials, preferring Windows Hello, Face ID, Touch ID, Android biometrics, or the device PIN instead of QR, USB, or NFC flows.
  • Stored authenticator transports are now retained for new passkeys; existing on-device passkeys remain compatible.
  • Passkey verification now supports targeted authentication responses where userHandle is omitted, while binding the challenge to the expected WordPress user.
  • Password login now validates the WordPress password without being converted into a generic failure by an unrelated global 2FA challenge; Tomevexa’s own adaptive email step-up remains enforced.
  • Successful password authentication clears the plugin’s failed-attempt counters.
  • Improved iPhone VoiceOver behavior for the email field by avoiding native validation focus jumps and preserving focus during activation.

1.2.0

  • Added accessible administrative controls to enable or disable email OTP, passkey, and password login independently.
  • Prevented administrators from disabling every login method; password login is restored automatically when no method is selected.
  • Disabled authentication endpoints now reject direct requests as well as hiding their front-end controls.
  • Disabling email OTP also disables email-based adaptive step-up verification.
  • Verified the Italian login page with a 100/100 mobile accessibility audit.

1.1.1

  • Added a dedicated on-device passkey registration path for Windows Hello, Windows PIN, Face ID, Touch ID, and Android device verification.
  • Added a separate security-key registration choice so USB/NFC authenticators remain available.
  • Passkey sign-in now prefers the current device while retaining hybrid and security-key alternatives.
  • Kept the existing Italian front-end login form and localized the passkey profile controls in Italian.

1.1.0

  • Added local WebAuthn/FIDO2 passkeys with usernameless passwordless sign-in.
  • Added passkey registration and removal in the WordPress user profile.
  • Requires HTTPS for passkey operations and user verification (PIN/biometric/device verification).
  • Passkey authentication verifies RP ID, origin, challenge, user presence, user verification, ES256 signatures, and authenticator counters.

1.0.0

  • Initial Tomevexa Secure Login release.
  • Added accessible email OTP authentication for non-administrator users.
  • Added optional password login and configurable password expiry.
  • Added local adaptive step-up verification for password logins from networks that have not yet been trusted.
  • Added privacy-preserving trusted-network recognition using salted hashes of reduced network prefixes with configurable expiry.
  • Added layered rate limiting, attempt limits, hashed OTP storage, and generic code-request responses.
  • Added optional Profile Builder Pro custom-redirect compatibility.
  • Prepared all user-facing strings for translation through WordPress.org.

Meta

  • Version 1.3.25
  • Last updated 23 hours ago
  • Active installations Fewer than 10
  • WordPress version 5.8 or higher
  • Tested up to 7.1.2
  • PHP version 7.4 or higher
  • Language
    English (US)
  • Tags
    loginotppasskeyspasswordlesswebauthn
  • Advanced View

Ratings

No reviews have been submitted yet.

Your review

See all reviews

Contributors

  • Francesco La Mancusa

Support

Got something to say? Need help?

View support forum

  • About
  • News
  • Hosting
  • Privacy
  • Showcase
  • Themes
  • Plugins
  • Patterns
  • Learn
  • Support
  • Developers
  • WordPress.tv ↗
  • Get Involved
  • Events
  • Donate ↗
  • Swag ↗
  • WordPress.com ↗
  • Matt ↗
  • bbPress ↗
  • BuddyPress ↗
WordPress.org
WordPress.org

Ch’ti

  • Visit our X (formerly Twitter) account
  • Visit our Bluesky account
  • Visit our Mastodon account
  • Visit our Threads account
  • Visit our Facebook page
  • Visit our Instagram account
  • Visit our LinkedIn account
  • Visit our TikTok account
  • Visit our YouTube channel
  • Visit our Tumblr account
Code is Poetry.
The WordPress® trademark is the intellectual property of the WordPress Foundation.