Fixed: WordPress.org plugin directory assets (icon, banner) served from the correct SVN path.
2.6.0
Added: Database upgrade system with sfme_db_version and automatic migration of legacy option prefixes.
Added: OAuth state is now bound to the initiating browser session via a short-lived sfme_oauth_session cookie.
Added: sfme_allow_email_linking filter and sfme_user_linked_by_email action for controlling email-based account linking.
Changed: Minimum PHP requirement is now 8.0.
Fixed: uninstall.php now fully removes all current-version plugin data.
2.5.3
Fixed: Remove .gitkeep placeholder files that were incorrectly included in the release package (WordPress Plugin Check: hidden_files).
2.5.2
Fixed: ID token signature verification failed (jwt_signature_invalid) for Entra apps that use per-application signing keys. The plugin now appends ?appid={client_id} when fetching the JWKS so the app-specific signing key is included.
2.5.1
Fixed: /sso/login returning 404 after activation — rewrite rule is now registered before flush.
2.5.0
Breaking: Removed role mapping and default role selector. All new SSO users are assigned the Subscriber role. Administrators promote users manually.
Removed: Role Mapping settings section and Role_Mapper class.
2.4.0
Added: Settings link on the Plugins page next to Deactivate.
2.3.0
Fixed: Validate $_SERVER[‘REQUEST_METHOD’] before accessing it (Plugin Check compliance).
Fixed: Sanitize redirect_to parameter with sanitize_url().
Fixed: Prefix template variables with sfme_ to avoid global namespace collisions.
Fixed: Suppress expected slow DB query warning on Entra OID user lookup.
Fixed: Reduce tags to 5 maximum per WordPress.org guidelines.
2.2.0
Breaking: Removed SAML 2.0 support. The plugin now uses OpenID Connect with PKCE exclusively.
Breaking: Removed robrichards/xmlseclibs and litesaml/lightsaml dependencies — no Composer vendor packages required.