Chrome'da otomatik doldurma kullanılırken 'Şifre alanı boş' hatası


10

Chrome'da giriş ekranını açtığımda, tarayıcı formu otomatik olarak kullanıcı adım ve şifremle dolduruyor. Ancak, gönder düğmesine bastığımda aşağıdaki mesajı alıyorum:

HATA: Şifre alanı boş.

Otomatik olarak doldurulmuş şifreye bir boşluk eklemek ve tekrar kaldırmak giriş yapmama izin veriyor. Neler oluyor?

Yanıtlar:


15

JavaScript işlevi wp_attempt_focusbu soruna neden oluyor. İşlev, sayfa yüklendikten kısa bir süre sonra etkinleşir, formu temizler ve buna odaklanır ve kullanıcıları giriş bilgilerini manuel olarak girmeye zorlar.

Chrome, JS işlevi alanı temizlemeden yalnızca milisaniye kadar önce kullanıcı adını ve şifreyi otomatik olarak dolduruyor. Chrome, alanları gerçekten boş olsa bile, sarı renkli doldurulmuş alanları görüntüleyerek değişiklikleri düzgün bir şekilde almaz.

Otomatik odaklama işlevini takdir etsem de, herkesin formun otomatik olarak temizlenmesini istemesinin iyi bir nedeni olduğunu düşünemiyorum.

Kaynak

Ne yazık ki, işlev wp-login.php913-930 satırlarında (WordPress 4.0) sabit kodlanmıştır . wp-login.phpGelecekteki herhangi bir WordPress güncellemesinin üzerine yazılabileceğinden , dosyayı tamamen değiştirmek kötü bir fikirdir. Bu yüzden biraz 'hack''e başvurmamız gerekecek.

Kolay düzeltme

wp_attempt_focusForm hata yok ise fonksiyon denir. Şanslıyız - hata kontrolü PHP ile yapılır. Bu, WP eylemlerini kullanarak bir form hatasını doğru zamanda sararak işlevin tetiklenmesini önleyebileceğimiz anlamına gelir. login_formEylem her zaman hata işlendikten sonra , JS çağrısından hemen önce başladığı için eylemi seçtim . Temanızın functions.php(veya eklenti dosyasına) aşağıdaki kodu ekleyin :

add_action("login_form", "kill_wp_attempt_focus");
function kill_wp_attempt_focus() {
    global $error;
    $error = TRUE;
}

Keskin düzeltme

Yukarıdaki düzeltme, işlevin tamamen çalışmasını önler, yani uygun otomatik odaklamayı da elde edemezsiniz. Etrafında başka bir yol daha var: Geeklab'danob_start esinlenerek HTML çıktısını arabelleğe almak ve değiştirmek . Arabelleğe alma, kodun belirli bölümlerini - bu durumda otomatik temizlenen kısmı - kaldırmamızı sağlar . Yine de tampon yıkamayı unutmayın.d.value = ''

add_action("login_form", "kill_wp_attempt_focus_start");
function kill_wp_attempt_focus_start() {
    ob_start("kill_wp_attempt_focus_replace");
}

function kill_wp_attempt_focus_replace($html) {
    return preg_replace("/d.value = '';/", "", $html);
}

add_action("login_footer", "kill_wp_attempt_focus_end");
function kill_wp_attempt_focus_end() {
    ob_end_flush();
}

2
Muhteşem. Bunun için bir düzeltme çekirdeğe uygulanmalıdır. Bununla ilgili sorunları olan kullanıcılar tarafından birçok yorum aldım. Düzeltmeyi paylaştığınız için teşekkürler.
Christine Cooper

Çözüm için teşekkürler. Ayrıca bunun özünde olmaması gerektiğini düşünün.
ThiagoPonte

0

Ben de bu problemi yaşadım. Scott Allen eklentisi "WP-SpamShield" kapatıldı ve her şey tekrar çalışmaya başladı.


0

Şifrem sadece boş / null oldu, bu yüzden "1234" gibi başka bir şeyle değiştirmeye çalıştım. Boşluk eklemek ve kaldırmak da JS'yi devre dışı bırakmadı. Ayrıca farklı tarayıcı denedim, bu yüzden gerçekten sadece Chrome'da mı?

Yaptığım şey, veritabanındaki parola karmasını değiştirdim ve işe yaradı. wp_users.user_pass.

benim durumumda şifre 1234BCrypted gibidir:$2a$06$x4lljZOw0Cfuj7jy6qsdp./iX34gaDUMXQIQob4VIHLXQ5yI92RjC

http://bcrypthashgenerator.apphb.com/?PlainText=1234

görüntü

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.