কাস্টম লগইন ফর্মটিতে সঠিক ব্যবহারকারীর নাম পরীক্ষা করুন


10

আমি আমার নিজস্ব কাস্টম লগইন ফর্ম তৈরি করার জন্য জেফ স্টার টিউটোরিয়াল ব্যবহার করেছি http://digwp.com/2010/12/login-register-password-code/ । এটি দুর্দান্ত কাজ করে তবে আমার একটি সমস্যা আছে। রিসেট পাসওয়ার্ড ফর্মটিতে, যদি কেউ ভুলভাবে তাদের ব্যবহারকারীর নাম প্রবেশ করে (যাতে এটি যাচাই করে না), ত্রুটি বার্তার সাথে তারা ডিফল্ট wp-login.php? ক্রিয়া = হারিয়ে যাওয়া পাসওয়ার্ডে লাথি মারবে।

আমার নিজের ত্রুটি পৃষ্ঠাতে পুনর্নির্দেশের কোনও উপায় আছে?

ধন্যবাদ!


হুড়োহুড়ি, username_exists()আপনি কিছুটা সাহায্য করতে পারেন?
আশফাম

উত্তর:


10

এই টিউটোরিয়ালে তিনি যে কোড পোস্ট করেছেন (খুব সুন্দর বিটিডাব্লু) পোস্টটি বিল্ড-ইন "রিসেট পাসওয়ার্ড" মডিউল যা ফর্মের লগইন-পিএফপিতে পুনর্নির্দেশ করে, তার ফর্মটি, তবে আপনি এটি পরিবর্তন করতে পারেন এবং মূলটির উপর ভিত্তি করে আপনার নিজের তৈরি করতে পারেন এবং যুক্ত করতে পারেন এটি টেমপ্লেট পৃষ্ঠায়, পরিবর্তন করুন:

<form method="post" action="<?php echo site_url('wp-login.php?action=lostpassword', 'login_post') ?>" class="wp-user-form">
    <div class="username">
        <label for="user_login" class="hide"><?php _e('Username or Email'); ?>: </label>
        <input type="text" name="user_login" value="" size="20" id="user_login" tabindex="1001" />
    </div>
    <div class="login_fields">
        <?php do_action('login_form', 'resetpass'); ?>
        <input type="submit" name="user-submit" value="<?php _e('Reset my password'); ?>" class="user-submit" tabindex="1002" />
        <?php $reset = $_GET['reset']; if($reset == true) { echo '<p>A message will be sent to your email address.</p>'; } ?>
        <input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>?reset=true" />
        <input type="hidden" name="user-cookie" value="1" />
    </div>
</form>

প্রতি:

<form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>" class="wp-user-form">
<div class="username">
    <label for="user_login" class="hide"><?php _e('Username or Email'); ?>: </label>
    <input type="text" name="user_login" value="" size="20" id="user_login" tabindex="1001" />
</div>
<div class="login_fields">
    <?php do_action('login_form', 'resetpass'); ?>
    <input type="submit" name="user-submit" value="<?php _e('Reset my password'); ?>" class="user-submit" tabindex="1002" />

    <?php
    if (isset($_POST['reset_pass']))
    {
        global $wpdb;
        $username = trim($_POST['user_login']);
        $user_exists = false;
        if (username_exists($username))
        {
            $user_exists = true;
            $user_data = get_userdatabylogin($username);
        } elseif (email_exists($username))
        {

            $user_exists = true;
            $user = get_user_by_email($username);
        } else
        {
            $error[] = '<p>' . __('Username or Email was not found, try again!') . '</p>';
        }
        if ($user_exists)
        {
            $user_login = $user->user_login;
            $user_email = $user->user_email;
            // Generate something random for a password... md5'ing current time with a rand salt
            $key = substr(md5(uniqid(microtime())), 0, 8);
            // Now insert the new pass md5'd into the db
            $wpdb->query("UPDATE $wpdb->users SET user_activation_key = '$key' WHERE user_login = '$user_login'");
            //create email message
            $message = __('Someone has asked to reset the password for the following site and username.') . "\r\n\r\n";
            $message .= get_option('siteurl') . "\r\n\r\n";
            $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
            $message .= __('To reset your password visit the following address, otherwise just ignore this email and nothing will happen.') . "\r\n\r\n";
            $message .= get_option('siteurl') . "/wp-login.php?action=rp&key=$key\r\n";
            //send email meassage
            if (FALSE == wp_mail($user_email, sprintf(__('[%s] Password Reset'), get_option('blogname')), $message))
            $error[] = '<p>' . __('The e-mail could not be sent.') . "<br />\n" . __('Possible reason: your host may have disabled the mail() function...') . '</p>';
        }
        if (count($error) > 0)
        {
            foreach ($error as $e)
            {
                echo $e . '<br/>';
            }
        } else
        {
            echo '<p>' . __('A message will be sent to your email address.') . '</p>';
        }
    }
    ?> 
    <input type="hidden" name="reset_pass" value="1" />
    <input type="hidden" name="user-cookie" value="1" />
</div>
</form>

দুর্দান্ত দেখাচ্ছে, আমি আপনাকে জানাতে পারি যদি এটি কাজ করে তবে।
পিপ্পিন

1
ঠিক আছে, আমি কয়েকটা পরিবর্তন করে দুর্দান্ত কাজ করতে পেরেছি। সিনট্যাক্সের বেশ কয়েকটি ত্রুটি ছিল এবং এমডি 5 কী জেনারেটর কাজ করে না, তাই আমি ডাব্লুপি-লগইন.এফপি থেকে একটিকে নিয়েছিলাম। আমার এখন একটি সমস্যা আছে। কেউ যখন নতুন পাসওয়ার্ড তৈরি করতে ইমেলটিতে url ক্লিক করেন, সেগুলি ডিফল্ট ফর্মে পুনর্নির্দেশ করা হয়, সুতরাং এখন তার জন্যও আমার একটি ফর্ম তৈরি করা দরকার।
পিপ্পিন

@ পিপ্পিন: এখানে এমডি 5 কী জেনারেটর কোডটি ডাব্লুপি-লগইন.পিএফ এর জন্য একটি এবং পুনর্নির্দেশ হিসাবে &redirect_to=$_SERVER['REQUEST_URI']আপনি যে ইমেলটি প্রেরণ করেছেন সেটিতে লিঙ্কটি যুক্ত করার চেষ্টা করুন ।
বেন্টারনেট

আমার লিঙ্কটি এখন দেখতে এইরকম দেখাচ্ছে $message .= get_option('siteurl') . "/wp-login.php?action=rp&key=$key&login=$user_login&redirect_to=$_SERVER['REQUEST_URI']\r\n";তবে অদ্ভুত বিষয়টি হ'ল আমি যখন & পুনঃনির্দেশ যুক্ত করি তখন বার্তাটি প্রেরণ হয় না। । । এছাড়াও, আমার কি তাদের নতুন পাসওয়ার্ড এবং এ জাতীয় প্রবেশ করার জন্য একটি নতুন ফর্ম তৈরি করার দরকার নেই?
পিপ্পিন

হ্যাঁ আমি এটি সম্পর্কে ভুলে গেছি, আপনাকে পাসওয়ার্ডটি পুনরায় সেট করতে আপনার নিজস্ব ফর্ম তৈরি করতে হবে এবং সম্ভবত বর্তমান ইউআরএলটিতে ব্যবহারকারীকে প্রেরিত লিঙ্কটি প্রতিস্থাপন করতে হবে এবং কী চেকের ভিত্তিতে যদি এটির ব্যবহারকারী এবং তাকে ফর্মটি প্রদর্শন করে show
বেন্টারনেট

8

সিটেক্স ত্রুটিগুলি সংশোধন করে @ বেইনটারনেট থেকে কোডের একটি আপডেট সংস্করণ এখানে দেওয়া হয়েছে, @ ভ্যাল দ্বারা পরামর্শ এবং ডাব্লুপি-লগইন.এফপি ৩.৪.২ থেকে কী জেনারেটর:

global $wpdb;
$username = trim($_POST['user_login']);
$user_exists = false;
// First check by username
if ( username_exists( $username ) ){
    $user_exists = true;
    $user = get_user_by('login', $username);
}
// Then, by e-mail address
elseif( email_exists($username) ){
        $user_exists = true;
        $user = get_user_by_email($username);
}else{
    $error[] = '<p>'.__('Username or Email was not found, try again!').'</p>';
}
if ($user_exists){
    $user_login = $user->user_login;
    $user_email = $user->user_email;

    $key = $wpdb->get_var($wpdb->prepare("SELECT user_activation_key FROM $wpdb->users WHERE user_login = %s", $user_login));
    if ( empty($key) ) {
        // Generate something random for a key...
        $key = wp_generate_password(20, false);
        do_action('retrieve_password_key', $user_login, $key);
        // Now insert the new md5 key into the db
        $wpdb->update($wpdb->users, array('user_activation_key' => $key), array('user_login' => $user_login));
    }

    //create email message
    $message = __('Someone has asked to reset the password for the following site and username.') . "\r\n\r\n";
    $message .= get_option('siteurl') . "\r\n\r\n";
    $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
    $message .= __('To reset your password visit the following address, otherwise just ignore this email and nothing will happen.') . "\r\n\r\n";
    $message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "&redirect_to=".urlencode(get_option('siteurl'))."\r\n";
    //send email meassage
    if (FALSE == wp_mail($user_email, sprintf(__('[%s] Password Reset'), get_option('blogname')), $message))
    $error[] = '<p>' . __('The e-mail could not be sent.') . "<br />\n" . __('Possible reason: your host may have disabled the mail() function...') . '</p>';
}
if (count($error) > 0 ){
    foreach($error as $e){
                echo $e . "<br/>";
            }
}else{
    echo '<p>'.__('A message will be sent to your email address.').'</p>'; 
}

1

আমি এখনও রিসেট কীটি সঠিকভাবে কাজ না করায় সমস্যাগুলির মুখোমুখি ছিলাম, ইমেলের লিঙ্কটি আমাকে ইউআরএল প্যারামিটারের সাহায্যে স্ট্যান্ডার্ড পাসওয়ার্ড পুনরায় সেট পৃষ্ঠাতে পুনর্নির্দেশ করবে যা কীটির সাথে কোনও সমস্যা নির্দেশ করে, তাই আমি আরও ঘনিষ্ঠভাবে wp-login.php ফাইল অনুসরণ করেছি এবং $ wp_hasher অবজেক্টটি অন্তর্ভুক্ত করেছে, এটি সমস্যার সমাধান করেছে এবং ইমেলের পাসওয়ার্ড পুনরায় সেট করার কাজ করে

if (($_SERVER['REQUEST_METHOD'] === (string) 'POST') && (isset($_POST['reset_pass']))) {

// Acccess global properties
global $wpdb, $wp_hasher;


// Variables
$error_pass_reset = array();
$username         = (string) trim($_POST['user_login']);
$user_exists      = (bool)   false;



// ---- USERNAME OR EMAIL EXISTS ---- //
if (username_exists($username)) {
    $user_exists = (bool)   true;
    $user        = (object) get_user_by('login', $username);
} // end if

else if (email_exists($username)) {
    $user_exists = (bool)   true;
    $user        = (object) get_user_by('email', $username);
} // end else if

else {
    $error_pass_reset[] = '<p>Username or Email was not found, please try again.</p>';
} // end else



// ---- USER EXISTS ---- //
if ($user_exists === (bool) true) {
    // Variables
    $user_login = (string) $user -> user_login;
    $user_email = (string) $user -> user_email;


    // Generate password reset key
if (empty($key)) {
    $key = (string) wp_generate_password(20, false);

    do_action('retrieve_password_key', $user_login, $key);


    // Create the $wp_hasher object
    if (empty($wp_hasher)) {
        require_once(ABSPATH . WPINC . '/class-phpass.php');

        $wp_hasher = new PasswordHash(8, true);
    }

    // Reset key with hasher applied (MD5 has string output)
    $hashed = (string) time() . ':' . $wp_hasher -> HashPassword($key);


    // Insert the new key into the database
    $wpdb -> update(
        $wpdb -> users,
        array(
            'user_activation_key' => $hashed
        ),
        array(
            'user_login' => $user_login
        )
    );
} // end if


    // Email message
    $message = (string)
    'Someone requested that the password be reset for the following account:' . "\r\n\r\n" .

    get_option('siteurl') . "\r\n\r\n" .

    'Username: ' . $user_login . "\r\n\r\n" .
    'If this was a mistake, just ignore this email and nothing will happen.' . "\r\n\r\n" .
    'To reset your password, visit the following address:' . "\r\n\r\n" .

    get_option('siteurl') . '/wp-login.php?action=rp&key=' . $key . '&login=' . $user_login . "\r\n";


    // Send email
    if ((bool) false === wp_mail($user_email, get_option('blogname') . ' Password Reset', $message)) {
        $error_pass_reset[] = '<p>The e-mail could not be sent at this time.</p>' . "\n";
    } // end if
} // end if


// Send the rest password email
do_action('login_form', 'resetpass');

} // end if (($_SERVER['REQUEST_METHOD'] === (string) 'POST') && (isset($_POST['reset_pass'])))

আমি একটি কাস্টম ভুলে যাওয়া পাসওয়ার্ড টেম্পলেট তৈরি করায় ডাব্লুপি_হ্যাসার কোড সহ এই উত্তরটি আমার পক্ষে অত্যন্ত কার্যকর ছিল।
নীলম খান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.