गलत पासवर्ड दर्ज करने के बाद मैं उपयोगकर्ता को कैसे पुनर्निर्देशित कर सकता हूं?


16

मैं wp_login_form()jQuery संवाद विंडो में लॉगिन फ़ॉर्म प्रदर्शित करने के लिए उपयोग कर रहा हूं ।

यदि उपयोगकर्ता गलत पासवर्ड दर्ज करता है, तो उपयोगकर्ता को बैकएंड पर ले जाया जाता है। मैं ऐसा नहीं चाहता। क्या उपयोगकर्ता को सूचित करने का कोई तरीका है कि उसने गलत पासवर्ड दर्ज किया है और अभी भी उसी पृष्ठ पर है?

wp_login_form()आने से पहले मैं एक प्लगइन का उपयोग कर रहा था। मुझे उम्मीद है कि मैं इसके लिए एक प्लगइन का उपयोग करने से बच सकता हूं।

मेरा कोड:

wp_login_form( array(
  'label_remember' => __( 'Remember me' ),
  'label_log_in' => __( 'Login' )
) );

जवाबों:


5

wp_login_form()एक एक्शन विशेषता के साथ एक फॉर्म बनाता है site_url/wp-login.php, जिसका अर्थ है कि जब आप सबमिट बटन पर क्लिक करते हैं, तो फॉर्म पोस्ट किया जाता है, site_url/wp-login.phpजो त्रुटियों (जैसे गलत पासवर्ड) पर पुनर्निर्देशित करता है। इसलिए आपके मामले में या तो एक प्लगइन का उपयोग करके वापस जाएं या पूरी लॉगिन प्रक्रिया को फिर से बनाएं। और इस तरह से आपको त्रुटियों पर नियंत्रण होगा, कस्टम लॉगिन फॉर्म पर सही उपयोगकर्ता नाम के लिए चेक पर एक नज़र डालें जो बहुत ही समान प्रश्न है।


26

मैं गूगल से यहाँ आया था। लेकिन जवाब ने मुझे संतुष्ट नहीं किया। मैं कुछ समय के लिए देख रहा था और एक बेहतर समाधान पाया।

अपने को यह जोड़े functions.php :

add_action( 'wp_login_failed', 'my_front_end_login_fail' );  // hook failed login

function my_front_end_login_fail( $username ) {
   $referrer = $_SERVER['HTTP_REFERER'];  // where did the post submission come from?
   // if there's a valid referrer, and it's not the default log-in screen
   if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) {
      wp_redirect( $referrer . '?login=failed' );  // let's append some information (login=failed) to the URL for the theme to use
      exit;
   }
}

धन्यवाद एलेक्सी, मैं इसका परीक्षण करूंगा (जैसा कि मैं अभी भी एक प्लगइन का उपयोग कर रहा हूं)
स्टीवन

7
गलत क्रेडेंशियल दर्ज किए जाने पर एलेक्सी का समाधान काम करता है, लेकिन दुर्भाग्य से विफल हो जाता है जब उपयोगकर्ता उपयोगकर्ता नाम या पासवर्ड दर्ज करना भूल जाता है। जाहिरा तौर पर Wordpress भी इस मामले में उपयोगकर्ता को लॉग इन करने की कोशिश नहीं करता है, इसलिए wp_login_failed कार्रवाई नहीं की जाती है।
Szczepan Hołyszewski

मैं कुछ समय बचाने के लिए यहां wp_get_referer () का उपयोग करूंगा: codex.wordpress.org/Function_Reference/wp_get_referer
Jake

1
इसके अलावा, आप निश्चित रूप से यहां add_query_arg का उपयोग करते हैं, इसलिए wp_redirect होना चाहिए: "wp_redirect (add_query_arg ('लॉगिन', 'विफल', $ रेफ़र));"
जेक

18

वर्तमान पद्धति मैं यहां बताए गए सभी मुद्दों से निपटने के लिए उपयोग कर रहा हूं, खाली उपयोगकर्ता नाम / पासवर्ड के साथ भी बहुत अच्छा काम करता है और जावास्क्रिप्ट पर भरोसा नहीं करता है (हालांकि जेएस इसके साथ अच्छा हो सकता है)।

add_action( 'wp_login_failed', 'custom_login_failed' );
function custom_login_failed( $username )
{
    $referrer = wp_get_referer();

    if ( $referrer && ! strstr($referrer, 'wp-login') && ! strstr($referrer,'wp-admin') )
    {
        wp_redirect( add_query_arg('login', 'failed', $referrer) );
        exit;
    }
}

कुंजी यह है कि एक खाली उपयोगकर्ता नाम / पासवर्ड को कैसे बदला जाए यह फ़िल्टर है:

add_filter( 'authenticate', 'custom_authenticate_username_password', 30, 3);
function custom_authenticate_username_password( $user, $username, $password )
{
    if ( is_a($user, 'WP_User') ) { return $user; }

    if ( empty($username) || empty($password) )
    {
        $error = new WP_Error();
        $user  = new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Invalid username or incorrect password.'));

        return $error;
    }
}

आप इसे एक कदम आगे ले जा सकते हैं और पूरी तरह से wp-login.php को बदलकर उपयोगकर्ताओं को अपने कस्टम लॉगिन पृष्ठ पर पुनर्निर्देशित कर सकते हैं और उस पृष्ठ का उपयोग login_failed पुनर्निर्देशन के लिए भी कर सकते हैं। पूर्ण कोड:

/**
 * Custom Login Page Actions
 */
// Change the login url sitewide to the custom login page
add_filter( 'login_url', 'custom_login_url', 10, 2 );
// Redirects wp-login to custom login with some custom error query vars when needed
add_action( 'login_head', 'custom_redirect_login', 10, 2 );
// Updates login failed to send user back to the custom form with a query var
add_action( 'wp_login_failed', 'custom_login_failed', 10, 2 );
// Updates authentication to return an error when one field or both are blank
add_filter( 'authenticate', 'custom_authenticate_username_password', 30, 3);
// Automatically adds the login form to "login" page
add_filter( 'the_content', 'custom_login_form_to_login_page' );

/**
 * Custom Login Page Functions
 */
function custom_login_url( $login_url='', $redirect='' )
{
    $page = get_page_by_path('login');
    if ( $page )
    {
        $login_url = get_permalink($page->ID);

        if (! empty($redirect) )
            $login_url = add_query_arg('redirect_to', urlencode($redirect), $login_url);
    }
    return $login_url;
}
function custom_redirect_login( $redirect_to='', $request='' )
{
    if ( 'wp-login.php' == $GLOBALS['pagenow'] )
    {
        $redirect_url = custom_login_url();

        if (! empty($_GET['action']) )
        {
            if ( 'lostpassword' == $_GET['action'] )
            {
                return;
            }
            elseif ( 'register' == $_GET['action'] )
            {
                $register_page = get_page_by_path('register');
                $redirect_url = get_permalink($register_page->ID);
            }
        }
        elseif (! empty($_GET['loggedout'])  )
        {
            $redirect_url = add_query_arg('action', 'loggedout', custom_login_url());
        }

        wp_redirect( $redirect_url );
        exit;
    }
}
function custom_login_failed( $username )
{
    $referrer = wp_get_referer();

    if ( $referrer && ! strstr($referrer, 'wp-login') && ! strstr($referrer, 'wp-admin') )
    {
        if ( empty($_GET['loggedout']) )
        wp_redirect( add_query_arg('action', 'failed', custom_login_url()) );
        else
        wp_redirect( add_query_arg('action', 'loggedout', custom_login_url()) );
        exit;
    }
}
function custom_authenticate_username_password( $user, $username, $password )
{
    if ( is_a($user, 'WP_User') ) { return $user; }

    if ( empty($username) || empty($password) )
    {
        $error = new WP_Error();
        $user  = new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Invalid username or incorrect password.'));

        return $error;
    }
}
function custom_login_form_to_login_page( $content )
{
    if ( is_page('login') && in_the_loop() )
    {
        $output = $message = "";
        if (! empty($_GET['action']) )
        {
            if ( 'failed' == $_GET['action'] )
                $message = "There was a problem with your username or password.";
            elseif ( 'loggedout' == $_GET['action'] )
                $message = "You are now logged out.";
            elseif ( 'recovered' == $_GET['action'] )
                $message = "Check your e-mail for the confirmation link.";
        }

        if ( $message ) $output .= '<div class="message"><p>'. $message .'</p></div>';
        $output .= wp_login_form('echo=0&redirect='. site_url());
        $output .= '<a href="'. wp_lostpassword_url( add_query_arg('action', 'recovered', get_permalink()) ) .'" title="Recover Lost Password">Lost Password?</a>';

        $content .= $output;
    }
    return $content;
}

पासवर्ड रिकवरी के लिए अपने लोगो को wp-login पेज पर जोड़ने के लिए कस्टमाइज़ और जोड़ें:

// calling it only on the login page
add_action( 'login_enqueue_scripts', 'custom_login_css', 10 );
function custom_login_css() { wp_enqueue_style( 'custom_login_css', get_template_directory_uri() .'/library/css/login.css', false ); }
// changing the logo link from wordpress.org to your site
add_filter( 'login_headerurl', 'custom_login_logo_url' );
function custom_login_logo_url() { return home_url(); }
// changing the alt text on the logo to show your site name
add_filter( 'login_headertitle', 'custom_login_title' );
function custom_login_title() { return get_option('blogname'); }

लॉगिन लोगो css:

.login h1 a {
    background: url(../images/login-logo.png) no-repeat top center;
    width: 274px;
    height: 63px;
    text-indent: -9999px;
    overflow: hidden;
    padding-bottom: 15px;
    display: block;
}

संपादित करें: मैंने इसे केवल एक अन्य साइट फॉर्म स्क्रैच पर लागू किया है, और ऊपर "कदम आगे" को और अधिक पूर्ण होने के लिए पाया, और "add_actions" में छोटी सिंटैक्स त्रुटियों को ठीक किया। एक अलग टेम्पलेट फ़ाइल के बिना लॉगिन पृष्ठ पर लॉगिन फ़ॉर्म को स्वचालित रूप से जोड़ने के लिए कुछ टिप्पणियां और एक विधि जोड़ी गई। लॉगिन फॉर्म मेथड को ज्यादातर उदाहरणों में काम करना चाहिए, क्योंकि यह "the_content" से जुड़ा हुआ है, यह कारण और समस्या पैदा कर सकता है यदि आपके पास लॉगिन पेज पर एक से अधिक लूप हैं, तो उस स्थिति में केवल पृष्ठ-login.php टेम्पलेट का उपयोग करें।


1
धन्यवाद, मैं इस पर एक नज़र डालूंगा (और देखूंगा कि क्या मैं इसे ट्विटर और एफबी जैसे 3 पार्टी लॉगिन के साथ मिलकर काम कर सकता हूं)
स्टीवन

1
जेक - यह एक अच्छा पूर्ण समाधान है। साझा करने के लिए धन्यवाद। +1
henrywright

यह मूल रूप से एक प्लगइन में लिपटे हुए है जिसे सीवन इन टेम्पलेट लॉगिन, एक सुंदर पूर्ण, छोटा प्लगइन कहा जाता है। wordpress.org/plugins/SHn-in-template-log-in
जेक

अच्छा, एक ही मुद्दा यह है कि यह वास्तव में सामने के अंत में त्रुटियों को बाहर नहीं फेंकता है ....
सियाह

4

स्वीकार किए गए समाधान में खाली खेतों के बारे में Szczepan Hołyszewski के बिंदु के लिए एक समाधान, निम्न jQuery मानक wp-login पेज पर जाने से रोकेगा: (लॉगिन पेज टेम्पलेट या footer.php में जोड़ें)

jQuery("#loginform-custom").submit(function(){
     var isFormValid = true;
       jQuery("input").each(function()
       {
       if (jQuery.trim($(this).val()).length == 0){
       jQuery(this).addClass("submit_error");
       isFormValid = false;
       }     
     else {
     jQuery(this).removeClass("submit_error");
     }
     });
     return isFormValid;
});

0

एलेक्सी के जवाब के अलावा एक। आप यह जाँचने के लिए एक jquery फ़ंक्शन जोड़ सकते हैं कि कोई एक फ़ील्ड रिक्त नहीं है। इस तरह से फॉर्म जमा नहीं होगा जब तक कि जाँच करने के लिए कुछ नहीं है, वर्डप्रेस को /wp-login.php पर पुनर्निर्देशित करने से रोकता है।

  <script>
        $("#wp-submit").click(function() {
          var user = $("input#user_login").val();
            if (user == "") {
            $("input#user_login").focus();
            return false;
          }
         });
  </script>   

अभी भी सुनिश्चित नहीं है कि पासवर्ड के पहलू को कैसे ठीक किया जाए


3
कृपया ध्यान रखें कि वर्डप्रेस "नो कंफ्लिक्ट" मोड में jQuery को लोड करता है। $उर्फ काम नहीं करता।
s_ha_dum

आपको यह भी विचार करना होगा कि उपयोगकर्ता हिट [दर्ज करें] और वह लॉगिन बटन पर क्लिक नहीं कर रहा है। इसके अलावा, आपको खाली पासवर्ड की भी जांच करनी होगी।
स्टीवन

-1
jQuery("#loginform-custom").submit(function(){
     var isFormValid = true;
       jQuery("input").each(function()
       {
       if (jQuery.trim($(this).val()).length == 0){
       jQuery(this).addClass("submit_error");
       isFormValid = false;
       }     
     else {
     jQuery(this).removeClass("submit_error");
     }
     });
     return isFormValid;
});

कृपया अपना उत्तर संपादित करें , और एक स्पष्टीकरण जोड़ें: कि समस्या का समाधान क्यों हो सकता है?
FUXIA
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.