Php 在Wordpress中登录时如何重定向用户?
我已经为我的用户在自定义Wordpress页面上添加了一个选项,用户可以在其中为他的帐户设置双向身份验证。当用户启用双向身份验证时,我将生成的种子保存到他的用户元中。现在我有一个问题,因为我不知道如何在登录过程中检查它 我认为首先进行正常登录,然后检查用户是否启用了安全功能可能是一个不错的选择。如果是,我可以在登录后将他重定向到自定义页面,在那里我必须输入验证码。当代码正确时,我可以继续登录。这样行吗?因为当他已经登录并单击帐户页面时,用户可以看到页面内容,因此此安全功能是垃圾,不再需要 是否有人知道Wordpress,可以帮助/告诉我添加此验证的最佳挂钩或位置 这不是关于编码我的员工的问题!当我知道地点和正确的流程时,我会自己做这一切 描述我的用例的图片:Php 在Wordpress中登录时如何重定向用户?,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我已经为我的用户在自定义Wordpress页面上添加了一个选项,用户可以在其中为他的帐户设置双向身份验证。当用户启用双向身份验证时,我将生成的种子保存到他的用户元中。现在我有一个问题,因为我不知道如何在登录过程中检查它 我认为首先进行正常登录,然后检查用户是否启用了安全功能可能是一个不错的选择。如果是,我可以在登录后将他重定向到自定义页面,在那里我必须输入验证码。当代码正确时,我可以继续登录。这样行吗?因为当他已经登录并单击帐户页面时,用户可以看到页面内容,因此此安全功能是垃圾,不再需要 是否有
这可以解决您必须检查此功能中是否启用了身份验证并将用户重定向到您的页面的问题
function admin_default_page() {
if(auth == 'yes'){
return '/add-redirect-url-here';
}
}
add_filter('login_redirect', 'admin_default_page');
基本思想是:使用会话/cookie(选择最适合您的)来识别双因素身份验证。您可以在
init
中钩住它们
下面是一个快速示例(未经测试,但希望您能理解):
这仅在登录期间有效。到达登录页面后,如果用户键入页面url,他们将能够访问该页面。我现在回来了,我必须感谢您!你的回答给了我一个方法,现在它工作起来就像我需要它一样。谢谢你。
function twofactor_check () {
//no need to do anything, if user is not logged in
if ( !is_user_logged_in() ) {
return;
}
//check two factor
$two_factor_enabled = 'check if enabled';
//no headache when two factor is disabled
if ( !$two_factor_enabled ) {
return;
}
//twofactor is already passed
if ( isset($_SESSION['two_factor_verified'] ) && $_SESSION['two_factor_verified'] == 'twofactor_passed' ) {
return;
}
if ( session_status() == PHP_SESSION_NONE ) {
session_start();
}
//twofactor not passed. user will only get landing page.
if ( !isset($_SESSION['two_factor_verified'] ) ) {
$_SESSION['two_factor_verified'] = 'started';
wp_redirect( 'url_to_two_factor_code_landing_page' );
exit;
}
//on your landing page, when passed, set $_SESSION['two_factor_verified'] to 'twofactor_passed'.
//and when failed, destroy $_SESSION['two_factor_verified'], so user can only access landing page before verifying twofactor.
//destry $_SESSION['two_factor_verified'], when users log out. you can use 'wp_logout' hook.
}
add_action('init', 'twofactor_check');