有很多问题和answers WordPress 4.0之前的外部身份验证和一些代码需要进行一些调整才能正常工作。例如,将第四个参数添加到wp_set_auth_cookie
将阻止一些奇怪的问题。然而,session\\u令牌不会被销毁,并且在每次登录后都会重复添加元值(导致一片混乱)。
为了让WordPress缓存插件正常工作,那么session\\u令牌需要正常工作:登录时创建,注销时销毁。
以下代码将登录外部数据库中的任何用户。
add_action( \'after_setup_theme\', \'xenword_login\', 10, 1 );
function xenword_login( $username ) {
add_filter( \'authenticate\', \'allow_programmatic_login\', 10, 3 ); // hook in earlier than other callbacks to short-circuit them
$user = wp_signon( array( \'user_login\' => $username ) );
remove_filter( \'authenticate\', \'allow_programmatic_login\', 10 );
if ( is_a( $user, \'WP_User\' ) ) {
wp_clear_auth_cookie();
wp_set_current_user( $user->ID, $user->user_login );
wp_set_auth_cookie( $user->ID, true, is_ssl(), true );
if ( is_user_logged_in() ) {
return $user->ID;
}
}
return false;
}
然后在同一个文件中放置一个allow_prographic_登录。
function allow_programmatic_login( $user, $username, $password ) {
$visitor = XenWord::getVisitor();
$user_id = XenWord::getVisitor()->getUserId();
if ( $user_id > 0 ) {
$username = $visitor[\'username\'];
return get_user_by( \'login\', $username );
}
}
除了管理员、编辑器等无法进入仪表板之外,其他功能都很好,因为cookie不会被验证。更换
wp_validate_auth_cookie
将使帐户具有访问权限,但缓存插件将无法正确加载。
经过几天(一年)的修补,我最近发现verify( $token )
导致问题。
$manager = WP_Session_Tokens::get_instance( $user->ID );
if ( ! $manager->verify( $token ) ) {
do_action( \'auth_cookie_bad_session_token\', $cookie_elements );
return false;
}
这让我查看了数据库,发现session\\u令牌是在登录时创建的,而不是在注销时销毁的。
我的问题:是否有人发现并克服了这个问题,因为只需在帐户中使用以下日志,但没有创建session\\u令牌。
wp_clear_auth_cookie();
wp_set_current_user( $user_id, $user->user_login );
wp_set_auth_cookie( $user_id, true, is_ssl(), true );
do_action(\'wp_login\', $user->user_login );
这使我可以使用authenticate选项,但不会销毁session\\u令牌。有什么建议吗?