At a glance
- What it does
- Secures the WordPress login and adds optional passwordless login with an email one-time password (OTP).
- Works without an account
- Brute-force protection, IP Manager, security logs, XML-RPC protection, REST API protection and the custom login URL work as soon as you activate the plugin.
- Needs an Authyo account
- Only for passwordless OTP login and the Google Authenticator fallback. You need an App ID, Client ID and Client Secret.
- OTP channel
- Email.
- You need
- WordPress 5.0+ and PHP 7.2+.
- Settings location
- WordPress admin, under Authyo Passwordless (Settings, IP Manager and Security Logs).
- Shortcode
[authyo_login], orauthyo_passwordless_login_form()in a theme template.- Get the plugin
- WordPress.org: Authyo Passwordless Login
Overview
Authyo Passwordless Login is a login security plugin for WordPress. It protects your site against brute-force attacks, lets you block or allow specific IP addresses, records login activity, and can hide or block common entry points such as xmlrpc.php, the REST API user list and wp-login.php.
On top of that, you can switch on passwordless login. Users enter their email address, receive a one-time password (OTP) and are signed in without typing a password. All the security features run on your own server. Only the OTP login and the Google Authenticator fallback use the Authyo service.
-
Brute-force protection
Limit failed logins per IP address and per username, with lockouts that get longer each time. Repeat offenders can be blacklisted automatically.
-
IP Manager
Whitelist trusted IPs and blacklist attackers. Search, filter and unlock IPs from one screen.
-
Security logs
Track logins, logouts, failed attempts, lockouts and blocked access. Filter by date, search, and export to CSV.
-
XML-RPC protection
Block requests to
xmlrpc.php, remove the pingback header and hide discovery links. -
REST API protection
Stop anonymous visitors from listing users or reading the REST API index. Other plugins’ endpoints keep working.
-
Custom login URL
Hide
wp-login.phpbehind a login address only you know. -
Passwordless OTP login
Users sign in with a one-time password sent to their email. Login tokens are single-use and tied to the browser.
-
Google Authenticator fallback
A backup way for administrators to sign in with an authenticator app if the email code does not work.
Requirements
- WordPress 5.0 or later and PHP 7.2 or later.
- No account is needed for the security features.
- For passwordless OTP login and Google Authenticator: an Authyo account with an application, and its App ID, Client ID and Client Secret.
- For the same features: your website address added as an Authorized Endpoint in your Authyo app.
Installation
The security features start working as soon as the plugin is active.
Install the plugin
Go to Plugins → Add New, search for Authyo Passwordless Login, then click Install Now. You can also upload the plugin ZIP using Plugins → Add New → Upload Plugin.
Activate it
Click Activate. Brute-force protection and security logs start automatically.
Open the plugin menu
A top-level Authyo Passwordless item appears in the WordPress admin menu. It has three pages: Settings, IP Manager and Security Logs.
Secure your site
These steps need no Authyo account. Open Authyo Passwordless → Settings. The settings are grouped in tabs: General, Security, Brute-Force, API Credentials, Google Auth and Support.
Check brute-force protection
Open the Brute-Force tab. Protection is on by default. Review the limits and adjust them if you wish. See the settings reference below for what each value does.
Turn on the Security options
Open the Security tab and switch on what you need: Block all XML-RPC requests, the three REST API and author-scan blocks, and the Custom Login URL.
Set a custom login URL (optional)
Switch on the custom login URL and enter a slug, for example
my-secret-login. Use at least 3 characters: lowercase letters, numbers and hyphens only. Save, then bookmark your new login address. The custom login URL needs pretty permalinks, so choose any option except “Plain” in Settings → Permalinks.With the custom login URL on,
wp-login.phpandwp-adminsend logged-out visitors to the home page. If you forget the new address, you can restore the default login by disabling the plugin through FTP or your hosting file manager.Add your own IP to the whitelist
Open Authyo Passwordless → IP Manager and add your own IP address to the whitelist, so you cannot lock yourself out. The page shows your current IP address.
Watch the activity
Open Authyo Passwordless → Security Logs to see logins, failed attempts and lockouts as they happen.
How to use it
Once passwordless login is on (see the next section), the login page shows the OTP form. You can also add the form to any page.
Use the login page
With passwordless login switched on, the WordPress login page shows the OTP form. When it is switched off, only the default WordPress login form is shown.
Add the form to a custom page
Create a page, add a Shortcode block with the code below, and publish it.
[authyo_login]Add the form to a theme template
Developers can output the form from a theme file with this PHP function.
<?php authyo_passwordless_login_form(); ?>What users do
The user enters their email address and requests a code. They receive a one-time password by email, type it in, and are logged in. No password is needed.
Manage blocked IPs
In IP Manager, search the whitelist and blacklist, and see the lockouts from the last 24 hours. From there you can unlock an IP or blacklist it permanently.
Settings reference
Every setting in the plugin, grouped by where you find it. Default values are shown next to the setting name.
General 2
- Enable Passwordless Login
- Show the passwordless login form on the WordPress login page. When off, only the default login form is shown. It needs all three API credentials before it can be turned on.
- Usage Tracking
- Optional. When ticked, anonymous usage data (plugin version, activation status) is shared to help improve the plugin. No personal data or site content is collected, and you can untick it at any time.
API Credentials 4
Needed only for passwordless login and Google Authenticator.
- Authyo App ID
- The App ID of your Authyo application.
- Authyo Client ID
- The Client ID of your Authyo application.
- Authyo Client Secret
- The Client Secret. After saving, the field shows that it is saved. Leave it blank to keep it, or tick the remove option to delete it (this turns passwordless login off).
- Authorized Endpoint
- In your Authyo app, add your website address as an authorized endpoint. Without it the plugin cannot send or verify OTPs.
Security: custom login URL 3
- Enable custom login URL
- Block direct access to
wp-login.phpandwp-adminfor logged-out visitors. Needs pretty permalinks. - Custom Login Slug
- Your login address, for example
my-secret-login. At least 3 characters. Only lowercase letters, numbers and hyphens, and it cannot start or end with a hyphen. Some reserved words are not allowed. - Hide Login Links
- Login links that WordPress, your theme or other plugins show to logged-out visitors (a “Log in” menu link, the comment form or the Meta widget) point to the home page instead of revealing your custom login URL. On for new installs. Sites updated from version 1.0.10 keep their current links until they turn it on.
Security: XML-RPC and REST API 4
- Block all XML-RPC requests (xmlrpc.php)
- Blocks requests to
xmlrpc.php, removes the X-Pingback header and hides XML-RPC discovery links. Whitelisted IPs are exempt. On Apache and LiteSpeed it uses.htaccessrules, and on Nginx a PHP fallback. - Block unauthenticated access to /wp/v2/users
- Stops anonymous visitors from listing usernames through the REST API. Logged-in users and whitelisted IPs are not affected.
- Block unauthenticated access to the REST API index (/wp-json/)
- Hides the list of available REST routes from anonymous visitors.
- Block unauthenticated access to author archives (?author=N)
- Stops attackers finding usernames through addresses such as
/?author=1. Anonymous visitors are sent to the home page.
Brute-Force 8
Failed logins are counted per IP address and per username. When a limit is reached, the IP or username is locked out for a while.
- Enable brute-force login protection Default: On
- The master switch for lockouts.
- IP Lockout: failed attempts Default: 5
- Lock an IP after this many failed logins within the time window.
- IP Lockout: time window (minutes) Default: 30
- The period in which failed attempts are counted.
- Username Lockout: failed attempts Default: 10
- Lock a username after this many failed logins from any IP. This stops attacks that spread across many IP addresses. Keep it higher than the IP limit.
- Initial lockout duration (minutes) Default: 15
- How long the first lockout lasts.
- Progressive Lockout: multiplier Default: ×2
- Each new lockout lasts this many times longer than the one before.
- Maximum lockout duration (minutes) Default: 1440 (24 hours)
- The longest a lockout can last.
- Auto-Block Repeat Offenders: after lockouts Default: 3
- An IP that has been locked out this many times is added to the blacklist permanently. It can be unblocked only from the IP Manager.
Google Auth 4
- Set up authenticator
- Each administrator sets up their own authenticator app by scanning a QR code and entering the 6-digit code. It works with Google Authenticator, Microsoft Authenticator, Authy, 1Password and other TOTP apps.
- Test a code / Remove authenticator
- Check that a code is accepted, or remove the authenticator from your account. You need to scan a new QR code to use it again.
- Offer Google Authenticator on the login page
- Shows the authenticator option only to administrators who have set it up, after their 3rd OTP error or straight away if the OTP service is unavailable. Saved immediately.
- Administrators list
- See which administrators have an authenticator, and remove one if someone loses their phone. Use Refresh from Authyo to update the status.
IP Manager 4
- Whitelisted IPs
- IP addresses that are never locked out by brute-force protection and are exempt from the XML-RPC and REST API blocks. Each has a label, who added it and when.
- Blacklisted IPs
- IP addresses that are blocked permanently and rejected immediately, before any credentials are checked.
- Active & Recent Lockouts (last 24 hours)
- Shows each locked IP or username, the lockout type, how many times it was locked and when it unlocks. You can unlock it or blacklist it permanently.
- Add IP to Whitelist / Blacklist
- Enter a valid IPv4 or IPv6 address and an optional label.
Security Logs 4
- Log list
- Every login, logout, failed attempt, lockout and blocked access, with the IP address, user agent and request URL. Use the search box and the date filters to find entries.
- Export CSV
- Download the logs for offline use.
- Log Manager
- The administrator who can change log settings, delete or clear logs, and add, remove or unlock IPs in the IP Manager. Other administrators have view-only access, and can still export the logs. Choose the manager under Security Logs → Log Settings.
- Log Retention Default: 90 days
- Logs older than this are deleted automatically every day. Choose 30, 60, 90, 180 or 365 days, or never delete.
No settings match your search.
Turn on passwordless OTP login
This part needs an Authyo account. The OTP is sent to the user’s email address.
Create your Authyo account
Go to app.authyo.io and create a free account.
Copy your credentials
Open your applications in the Authyo dashboard and copy the App ID, Client ID and Client Secret. Create an application first if you do not have one.
Add your website as an Authorized Endpoint
In your Authyo app, find the Authorized Endpoint section and add your website address.
This is a security feature. Without it the plugin cannot send or verify OTPs.
Enter the credentials in WordPress
Go to Authyo Passwordless → Settings → API Credentials and fill in the Authyo App ID, Authyo Client ID and Authyo Client Secret, then save.
Enable passwordless login
Open the General tab, tick Enable Passwordless Login and save. The form now appears on the login page.
Test it
Open your login page in a private window, enter your email address, and complete the login with the code you receive.
Set up the Google Authenticator fallback
A backup way for administrators to sign in if the email code does not arrive. It needs your Authyo App ID, and your website added as an Authorized Endpoint (see above).
Open the Google Auth tab
Go to Authyo Passwordless → Settings → Google Auth. If the page asks for your credentials, add them under API Credentials first.
Open your authenticator app
Install Google Authenticator or any TOTP app on your phone, if you do not have one.
Scan the QR code
Click Set up authenticator. In the app, tap “+” and choose “Scan a QR code”, then scan the code on the screen.
Enter the 6-digit code
Type the code the app shows for your site and click Verify and finish. The status changes to Active.
Turn on the login option
Switch on Offer Google Authenticator on the login page. It is shown only to administrators who have set it up, after their 3rd wrong email code, or straight away if the OTP service is unavailable.
If you are locked out
Two safety exits are built in.
Your IP address was blocked
Add the line below to your
wp-config.phpfile. It turns off all IP blocking and lockouts. Log in, remove your IP from the blacklist (or whitelist it) in IP Manager, then delete the line again.define( 'AUTHYO_DISABLE_IP_BLOCKING', true );You forgot your custom login URL
Disable the plugin through FTP or your hosting file manager, for example by renaming the
authyo-passwordless-loginfolder inwp-content/plugins. The default WordPress login returns. Then rename the folder back and set a new address.
Troubleshooting
Most problems have a quick fix. Find your issue below.
I blocked my own IP and cannot reach the login page
define( 'AUTHYO_DISABLE_IP_BLOCKING', true ); to wp-config.php. Log in, fix the IP lists in IP Manager, then remove the line. The steps are in “If you are locked out” above.I forgot my custom login URL
My custom login URL shows a “not found” page
The passwordless login form does not appear
The OTP is not sent, or I see “Please check your API credentials”
I see “OTP already sent. Please wait … second(s)”
I see “Too many OTP requests for this email address”
I see “Too many incorrect codes for this account”
I see “Too many incorrect attempts. Please go back and request a new OTP”
I see “OTP session expired”
I see “Security check failed: Browser session mismatch”
Lockouts affect all my visitors, or my IP shows as private
CF-Connecting-IP) and from proxies on a private network (X-Forwarded-For). For other setups, return the real IP with the authyo_passwordless_client_ip filter.The Google Authenticator option is not on the login page
Logout does not work with the custom login URL
Frequently asked questions
Do I need API keys for the security features?
How does brute-force protection work?
How does passwordless login work?
Are OTP codes protected against guessing?
How long are login tokens valid?
What does XML-RPC protection do?
xmlrpc.php, removes the X-Pingback header and hides XML-RPC discovery links. Whitelisted IPs are exempt. Anything that relies on XML-RPC, such as some remote publishing tools and apps, stops working unless its IP is whitelisted.What does REST API protection do?
Does it work behind Cloudflare or a proxy?
CF-Connecting-IP for Cloudflare and X-Forwarded-For for proxies on a private network. Private and unknown addresses are never locked out or blacklisted.Can I use it on a custom login page?
[authyo_login] shortcode on any page, or call authyo_passwordless_login_form() in a theme template.Who can delete logs and change IP lists?
How long are security logs kept?
What data goes to Authyo?
Still need help?
If you couldn’t find the answer in this guide, submit our support form and the Authyo team will get back to you.