{"id":185423,"date":"2024-06-24T08:10:26","date_gmt":"2024-06-24T08:10:26","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/cloudbridge-2fa\/"},"modified":"2026-03-16T20:51:45","modified_gmt":"2026-03-16T20:51:45","slug":"cloudbridge-2fa","status":"publish","type":"plugin","link":"https:\/\/lo.wordpress.org\/plugins\/cloudbridge-2fa\/","author":1481119,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.0.1","stable_tag":"2.0.1","tested":"6.9.4","requires":"5.4.0","requires_php":"7.4","requires_plugins":null,"header_name":"Cloudbridge 2FA","header_author":"WebbPlatsen, Joaquim Homrighausen <joho@webbplatsen.se>","header_description":"Uncomplicated 2FA plugin for WordPress","assets_banners_color":"773910","last_updated":"2026-03-16 20:51:45","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/code.webbplatsen.net\/wordpress\/cloudbridge-2fa\/","header_plugin_uri":"https:\/\/code.webbplatsen.net\/wordpress\/cloudbridge-2fa\/","header_author_uri":"https:\/\/webbplatsen.se\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":1319,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"1.0.5":{"tag":"1.0.5","author":"joho68","date":"2025-12-08 11:56:24"},"2.0.0":{"tag":"2.0.0","author":"joho68","date":"2026-03-16 20:10:50"},"2.0.1":{"tag":"2.0.1","author":"joho68","date":"2026-03-16 20:51:45"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3106510,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3106510,"resolution":"256x256","location":"assets","locale":""},"icon.svg":{"filename":"icon.svg","revision":3106510,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3484025,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3484025,"resolution":"772x250","location":"assets","locale":""},"banner.svg":{"filename":"banner.svg","revision":3484025,"resolution":false,"location":"assets","locale":false}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3484240,"resolution":false,"location":"assets","locale":"","contents":"{\"landingPage\":\"\\\/wp-admin\\\/plugins.php\",\"preferredVersions\":{\"php\":\"8.1\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"installPlugin\",\"options\":{\"activate\":true},\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"cloudbridge-2fa\"}},{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.5","2.0.0","2.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3106510,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3106510,"resolution":"2","location":"assets","locale":""}},"screenshots":{"1":"Sample e-mail content with OTP from Cloudbridge 2FA","2":"Sample OTP code entry form when logging into WordPress"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[9211,8588,600],"plugin_category":[54],"plugin_contributors":[190415,190417],"plugin_business_model":[],"class_list":["post-185423","plugin","type-plugin","status-publish","hentry","plugin_tags-2fa","plugin_tags-passwords","plugin_tags-security","plugin_category-security-and-spam-protection","plugin_contributors-joho68","plugin_contributors-webbplatsen","plugin_committers-joho68"],"banners":{"banner":"https:\/\/ps.w.org\/cloudbridge-2fa\/assets\/banner-772x250.png?rev=3484025","banner_2x":"https:\/\/ps.w.org\/cloudbridge-2fa\/assets\/banner-1544x500.png?rev=3484025","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/cloudbridge-2fa\/assets\/icon.svg?rev=3106510","icon":"https:\/\/ps.w.org\/cloudbridge-2fa\/assets\/icon.svg?rev=3106510","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/cloudbridge-2fa\/assets\/screenshot-1.png?rev=3106510","caption":"Sample e-mail content with OTP from Cloudbridge 2FA"},{"src":"https:\/\/ps.w.org\/cloudbridge-2fa\/assets\/screenshot-2.png?rev=3106510","caption":"Sample OTP code entry form when logging into WordPress"}],"raw_content":"<!--section=description-->\n<p>This plugin provides uncomplicated 2FA functionality for WordPress. It will\nallow you to require a second, one time password or OTP, code to be entered\nwhen certain (or all) users attempt to log in to WordPress.<\/p>\n\n<p>The plugin supports two factor methods:<\/p>\n\n<ul>\n<li>six-digit codes sent by e-mail<\/li>\n<li>standards-based authenticator apps using TOTP<\/li>\n<\/ul>\n\n<p>The e-mail code has a limited lifetime (defaults to 15 minutes). Once a code\nhas been consumed, it is considered invalid.<\/p>\n\n<p>Authenticator app setup is handled from the user's own profile page. The plugin\nprovides a QR code, a manual setup key, and recovery codes for when the\nauthenticator app is not available.<\/p>\n\n<p>You may configure that only certain roles are required to use 2FA, and it is\nrecommended that you enable 2FA for those users with privileged access.<\/p>\n\n<p>You may also configure the plugin to allow certain roles to enable an OTP code\nbypass, which will set a cookie in that user's web browser. The cookies are\npartially based on the username, so several users can share the same browser,\nbut still be required to always enter the OTP code, or bypass it if the cookie\nis present.<\/p>\n\n<p>You can add custom text to the OTP code entry form, and you can add custom text\nto the OTP code e-mail message.<\/p>\n\n<p>The plugin can be configured to allow it to be handled\/managed only by specific\nusers, thus making it harder for someone to accidentally or intentionally\ndeactivate it. The implemented solution for this is by no means waterproof. If\nsomeone, for example, has access to your WordPress installation by means of FTP\nor similar, the plugin files can be physically removed (or moved out of your\nWordPress installation), which basically deactivates the plugin as well.<\/p>\n\n<h3>Credits<\/h3>\n\n<p>The Cloudbridge 2FA Plugin was written by Joaquim Homrighausen while converting caffeine into code.<\/p>\n\n<p>Cloudbridge 2FA is sponsored by <a href=\"https:\/\/webbplatsen.se\">WebbPlatsen i Sverige AB<\/a>, Sweden.<\/p>\n\n<p>Commercial support and customizations for this plugin is available from WebbPlatsen i Sverige AB in Sweden.<\/p>\n\n<p>If you find this plugin useful, the author is happy to receive a donation, good review, or just a kind word.<\/p>\n\n<p>If there is something you feel to be missing from this plugin, or if you have found a problem with the code or a feature, please do not hesitate to reach out to support@webbplatsen.se.<\/p>\n\n<p>This plugin can also be downloaded from <a href=\"https:\/\/code.webbplatsen.net\/wordpress\/cloudbridge-2fa\/\">code.webbplatsen.net<\/a> and <a href=\"https:\/\/github.com\/joho1968\/Cloudbridge-2FA\">GitHub<\/a><\/p>\n\n<p>More detailed documentation is available at <a href=\"https:\/\/code.webbplatsen.net\/documentation\/cloudbridge-2fa\/\">https:\/\/code.webbplatsen.net\/documentation\/cloudbridge-2fa\/<\/a><\/p>\n\n<p>Kudos to Kev Quirk for <a href=\"https:\/\/simplecss.org\/\">Simple CSS<\/a><\/p>\n\n<p>QR code setup on the authenticated profile page uses QR Code Generator for JavaScript by Kazuhiko Arase (MIT license).<\/p>\n\n<!--section=installation-->\n<p>This section describes how to install the plugin and get it working.<\/p>\n\n<ol>\n<li>Upload the contents of the <code>cloudbridge-2fa<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Configure the plugin settings<\/li>\n<\/ol>\n\n<h4>Is the plugin locale aware<\/h4>\n\n<p>Cloudbridge 2FA uses standard WordPress functionality to handle localization\/locale. The native language localization of the plugin is English. It has been translated to Swedish by the author.<\/p>\n\n<h4>Are there any incompatibilities<\/h4>\n\n<p>This is a hard question to answer. There are no known incompatibilities.<\/p>\n\n<!--section=changelog-->\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Fixed a settings-page regression where saving one tab could unset values on another tab<\/li>\n<li>Fixed the Bypass 2FA tab layout after the recent admin UI changes<\/li>\n<li>Restored returning to the active settings tab after saving<\/li>\n<li>Sent expired or stale login verification attempts back to the WordPress login screen so the user can start over cleanly<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Verified with PHP 7.4, 8.1, 8.2, 8.3, and 8.4<\/li>\n<li>Added authenticator app support using standards-based TOTP<\/li>\n<li>Added recovery codes for authenticator-enabled accounts<\/li>\n<li>Added QR code and manual setup key support to the user profile<\/li>\n<li>Reworked the admin settings so authenticator-app and e-mail OTP settings are easier to find<\/li>\n<li>Hardened redirect handling in login and OTP completion flows<\/li>\n<li>Added CSRF protection to configuration import<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Verified with WordPress 6.8 and 6.9<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Verified with WordPress 6.7<\/li>\n<li>Verified with Plugin Check (PCP)<\/li>\n<li>Corrected some checks for <strong>uninstall.php<\/strong> and made it more WP-CLI compatible<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fix some incorrect links in plugin and <strong>README.txt<\/strong><\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fix of minor PHP warning<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fix of minor PHP warning<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Uncomplicated 2FA plugin for WordPress with e-mail OTP and authenticator app support.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/185423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=185423"}],"author":[{"embeddable":true,"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/joho68"}],"wp:attachment":[{"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=185423"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=185423"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=185423"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=185423"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=185423"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/lo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=185423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}