Duet G. Blog

Keep It Simple, Stupid

给WordPress双重身份验证增加应用程序密码支持

2020年底发布的Wordpress5.6增加了应用程序密码(Application Passwords)功能,这个功能是建立在整合Application Passwords插件代码的基础上的。

事实上Wordpress官方GitHub账号上还有一款双重身份验证插件,也就是Two-Factor插件。尽管在Wordpress.org的插件库里,这款插件的作者既没有写作官方商业插件的Automattic,也没写作开源插件的WordPress Contributors,而是写为Plugin Contributors。但鉴于它的代码在官方GitHub账号上托管的身份,它无疑算是官方的两步验证插件。只是这款插件已经发布了这么久,并没有见官方像应用程序密码一样把它的代码整合进核心代码。也不知道是不是为了给其他第三方商业两步验证插件留条生路。

本着简单免费的原则,我还是选择了官方身份的这款免费插件。不过用了之后发现了些小问题——这款插件直接对已经开启了两步验证的账号禁用了API登录的请求。这导致我的IFTTT没有办法再和Wordpress互动。这是Two-Factor默认的设置,倒也不是bug,只不过它并没有给一个能处理的用户界面来修改。

最终的解决方案是Application Passwords的作者在GitHub上给出来的,不过也只是一段代码,而非是增加一个用户界面选项。

add_filter( 'two_factor_user_api_login_enable', function( $enable ) {
    // Allow API login when using an application password even with 2fa enabled.
    if ( did_action( 'application_password_did_authenticate' ) ) {
        return true;
    }

    return $enable;
} );

在Wordpress.org上插件库里,Application Passwords的介绍中也有这段代码的描述,只不过任何人都没有将它做成一个用户界面选项。然而Application Passwords的代码已经整合进了Wordpress核心代码里,以后恐怕也不太有可能看到有这个选项了,毕竟它本来就是Two-Factor的功能。

把这段代码粘到主题的functions.php里就可以了。不过如果嫌麻烦,我也做了一个简单的插件,直接下载安装激活就可以了(本身就还是这段代码)。