我正在建立一个为特权客户提供受保护空间的网站,他们输入密码并获得独家优惠等。我已将可见性设置更改为密码保护并输入了密码。
我现在的问题是区分大小写!我无法在任何地方找到如何改变这一点。当然有办法吗?
任何人都可以在这里曝光吗?
亲切的问候,
肖恩
答案 0 :(得分:2)
快速解决方案是安装插件:
https://wordpress.org/plugins/case-insensitive-passwords/installation/
这个似乎可以解决问题,并表示它与4.0版兼容
我也发现了这个here
编辑显示实际代码(确认有效,但不是因为密码保护页面使用其他功能http://codex.wordpress.org/Function_Reference/post_password_required):
<?php
if ( !function_exists('wp_set_password') ) {
function wp_set_password( $password, $user_id ) {
global $wpdb;
$password = strtolower( $password );
$hash = wp_hash_password($password);
$wpdb->update($wpdb->users, array('user_pass' => $hash, 'user_activation_key' => ''), array('ID' => $user_id) );
wp_cache_delete($user_id, 'users');
}
}
if ( !function_exists('wp_hash_password') ) {
function wp_hash_password($password) {
global $wp_hasher;
$password = strtolower( $password );
if ( empty($wp_hasher) ) {
require_once( ABSPATH . 'wp-includes/class-phpass.php');
// By default, use the portable hash from phpass
$wp_hasher = new PasswordHash(8, TRUE);
}
return $wp_hasher->HashPassword($password);
}
}
function case_insensitive_check_password( $check, $password, $hash, $user_id ) {
global $wp_hasher;
if ( !$check ) {
if ( empty($wp_hasher) ) {
require_once( ABSPATH . 'wp-includes/class-phpass.php');
// By default, use the portable hash from phpass
$wp_hasher = new PasswordHash(8, TRUE);
}
$password = strtolower( $password );
$check = $wp_hasher->CheckPassword($password, $hash);
}
return $check;
}
add_filter( 'check_password', 'case_insensitive_check_password', 10, 4 );
编辑:
我已经审核了代码,发现更好的方法是在表单上快速而肮脏的黑客攻击,强制所有插入的字符都是小写的。
将以下代码添加到functions.php文件中:
function my_password_form() {
global $post;
$label = 'pwbox-'.( empty( $post->ID ) ? rand() : $post->ID );
$o = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post">
' . __( "To view this protected post, enter the password below:" ) . '
<label for="' . $label . '">' . __( "Password:" ) . ' </label>
<input name="post_password" onChange="javascript:this.value=this.value.toLowerCase();" id="' . $label . '" type="password" size="20" maxlength="20" />
<input type="submit" name="Submit" value="' . esc_attr__( "Submit" ) . '" />
</form>
';
return $o;
}
add_filter( 'the_password_form', 'my_password_form' );
请注意,现在您只能在管理中插入小写密码,否则它将无效。
代码正在做什么是onChange将插入的单词转换为小写,但是如果你输入一个带大写字母的密码,它就无法正常工作。
Ex:受密码保护的页面密码:Banana - &gt;插入密码:香蕉=它会比较香蕉和香蕉,因为插入的将是小写的。
您可以按照此link
将hack检查为插件答案 1 :(得分:0)
我也是想弄清楚这个。我尝试了nunorbatista为functions.php提供的代码,但它没有用。我发现另一个问题有一个答案,解决方案几乎相同,只是他们使用&#34; onkeypress&#34;而不是&#34; onChange&#34;。这是他的代码,这个小改动:
function my_password_form() {
global $post;
$label = 'pwbox-'.( empty( $post->ID ) ? rand() : $post->ID );
$o = '<form action="' . esc_url( site_url('wp-login.php?action=postpass', 'login_post' ) ) . '" method="post">
' . __( "To view this protected post, enter the password below:" ) . '
<label for="' . $label . '">' . __( "Password:" ) . ' </label>
<input name="post_password" onkeypress="javascript:this.value=this.value.toLowerCase();" id="' . $label . '" type="password" size="20" maxlength="20" />
<input type="submit" name="Submit" value="' . esc_attr__( "Submit" ) . '" />
</form>
';
return $o;
}
add_filter( 'the_password_form', 'my_password_form' );