কেবল ইমেল দিয়ে কোনও ব্যবহারকারীর নাম কীভাবে লগইন করবেন?


20

দু'দিন ধরে অনুসন্ধান করার পরে এবং 2 বছরের পুরানো থ্রেডগুলি পড়ার পরে আমি কেবল ইমেলের মাধ্যমে ব্যবহারকারীদের লগইন করার সমস্যার সমাধান পেতে আমার অসুবিধা হচ্ছে।

প্রথমে আমি ডাব্লুপি_ইমেল_লগিনটি দেখে কেবল আনন্দিত হয়েছি কেবলমাত্র আপনি এখনও লগইন করতে আপনার ব্যবহারকারীর নামটি ব্যবহার করতে পারেন তা জানতে। প্লাগিন হিসাবে এটি কীভাবে লিখতে হবে তা সম্পর্কে আমি নিশ্চিত নই। আমার ধারণাটি রেজিস্টার_নিউ_উউসার ফাংশনটিকে ওভাররাইড করা। আমি এটি "প্লাগযোগ্য" ফাংশন তালিকায় দেখিনি। আমি কি ফিল্টারগুলি / ক্রিয়াটি এটি সম্পাদন করতে পারি?

আমি বুঝতে পারি যে মূল ফাইলগুলি সম্পাদনা করা ফ্যাশনেবল নয় তাই আমি আশা করছি কোনও সমাধান বেরিয়ে আসবে তবে যদি উপস্থিত না থাকে তবে আমি আমার সম্ভাবনাগুলি নিয়ে যাব। Wp-login.php এ "রেজিস্টার_নু_উজার" ফাংশনের প্রথম লাইনে আমি যুক্ত করতে পারি:

$nickname_variable(??) = $user_login // set the nickname to the username
$user_login = $user_email; // set the user_login/username to the email address

এটি বেশ সুন্দরভাবে কাজ করে যেহেতু ওয়ার্ডপ্রেস লোকেরা তাদের ব্যবহারকারীর নাম পরিবর্তন করতে দেয় না। রেজিস্টার স্ক্রিনে (ফর্ম) এটি ব্যবহারকারীর নাম এবং ইমেলের জন্য জিজ্ঞাসা করে; আমি ডাকনামের ভেরিয়েবলের জন্য ব্যবহারকারীর নামটি সেট করতে চাই (যদি কেউ আমাকে ডাকনাম ভেরিয়েবলটি বলা হয় বা রেজিস্ট্রেশন চলাকালীন এটি কোথায় সেট করা যায় যা প্রশংসা করতে পারে) বলতে পারেন।

চিয়ার্স,

সেকরা


আপনি কি সম্পূর্ণরূপে ব্যবহারকারীর নাম বাদ দেওয়ার চেষ্টা করছেন? আপনার জন্য ইমেল লগইন প্লাগইন কেন কাজ করবে না?
রায়ান

আপনি কেন ব্যবহারকারীর নামগুলি বন্ধ করতে চান তা আমি সত্যিই আগ্রহী, কারণ সেগুলি ওয়ার্ডপ্রেসের সমস্ত ব্যবহারকারীর তথ্যের ভিত্তি। এটি পোস্টকে দূরে সরিয়ে দেওয়ার চেষ্টা করার মতো - প্রচুর পরিমাণে বেতন না দেওয়ার জন্য প্রচুর কাজ এবং রাস্তায় সমস্যাগুলির গ্যারান্টি।
সিকহিপ্পি

1
@ রায়ান- আমি মনে করি না যে আমি ব্যবহারকারীর নামগুলি মুছে ফেলতে সক্ষম হব পরিবর্তে আমি কেবল ইমেল নামটি ইমেলের ঠিকানার সাথে সমান করতে বাধ্য করছি।
এজেন্টস্মিত 666

@ সিকহिप्পি - লগইনের জন্য আমি মনে করি ইমেলটি ব্যবহারকারীর নামের চেয়ে ভাল এবং আরও অনন্য। ব্যবহারকারীর পোস্ট করার পরে আমি ডাক নাম হিসাবে ব্যবহারকারীর নামটি ব্যবহার করব। আপনি ঠিক বলেছেন যে ভেরিয়েবল "ব্যবহারকারীর নাম" থেকে "মুক্তি" পাওয়া ব্যথা হবে কারণ আমি নই। আমি যখন ব্যবহারকারীর নাম নিবন্ধভুক্ত করি তখন কেবলমাত্র তার জন্য ব্যবহারকারীর নামটিই বেছে নিচ্ছি (ব্যবহারকারীর নামটি তাদের ইমেল ঠিকানা হবে; তাদের ডাক নামটি তাদের ব্যবহারকারীর নাম হিসাবে দেওয়া হবে)। শেষ পর্যন্ত কোনও ভেরিয়েবল নষ্ট হয় না সবকিছু অক্ষত থাকে।
এজেন্টমিথ 666

1
@ সিকহिप्পি - আপনি ঠিকই বলেছেন যেহেতু ওয়ার্ডপ্রেসের ডিফল্ট ব্যবহারকারীদের তাদের ব্যবহারকারীর নাম পরিবর্তন করতে মঞ্জুরি দেয় না তাদের ব্যবহারকারীর নাম / ইমেল ঠিকানাটি যদি তারা তাদের যোগাযোগের ইমেল ঠিকানা পরিবর্তন করে থাকে তবে একই থাকবে। আমি এটি প্রথম থেকেই বিবেচনা করেছি এবং আমার নিজের অভিজ্ঞতায় আমি দেখতে পেয়েছি যে লোকেরা খুব কমই একটি ইমেল ঠিকানা "মুছুন" করে। তারা নতুন পেতে পারে তবে সাধারণত তাদের এখনও তাদের পুরানো থাকবে। এবং যদি না হয় তবে এই বিরল পরিস্থিতিতে আমরা ম্যানুয়ালি এটি ডাটাবেসে পরিবর্তন করব। আমি আপনার প্রতিক্রিয়া এবং অন্তর্দৃষ্টি শিখিপ্পি সত্যিই প্রশংসা করি! এখন আমি আমার পোস্টটির সমাধানের জন্য আশা করি :)
এজেন্টস্মিত 666

উত্তর:


19

আপডেট: আমি ইমেল সহ লগইন, নিবন্ধকরণ এবং পাসওয়ার্ড পুনরুদ্ধারের জন্য একটি প্লাগইন তৈরি করেছি। https://wordpress.org/plugins/smart-wp-login/

সংক্ষেপে উত্তর, আপনি ইমেল দিয়ে লগইন করতে ওয়ার্ডপ্রেস কনফিগার করতে পারেন।

তিনটি পদক্ষেপ:

  • ডিফল্ট প্রমাণীকরণ ফাংশন সরান
  • কাস্টম প্রমাণীকরণ ফাংশন যুক্ত করুন
  • Wp-login.php এ "ব্যবহারকারী নাম" পাঠ্যটি "ইমেল" এ পরিবর্তন করুন

এক নোট:

  • মূল ফাইলগুলি সম্পাদনা করবেন না।

ওয়ার্ডপ্রেস ডিফল্ট প্রমাণীকরণ ফাংশন সরান।

ওয়ার্ডপ্রেস ব্যবহারকারী লগইনে অতিরিক্ত বৈধকরণ সম্পাদনের জন্য " প্রমাণীকরণ " ফিল্টার ব্যবহার করে ।

remove_filter('authenticate', 'wp_authenticate_username_password', 20);

কাস্টম প্রমাণীকরণ ফাংশন যুক্ত করুন

add_filter('authenticate', function($user, $email, $password){

    //Check for empty fields
    if(empty($email) || empty ($password)){        
        //create new error object and add errors to it.
        $error = new WP_Error();

        if(empty($email)){ //No email
            $error->add('empty_username', __('<strong>ERROR</strong>: Email field is empty.'));
        }
        else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ //Invalid Email
            $error->add('invalid_username', __('<strong>ERROR</strong>: Email is invalid.'));
        }

        if(empty($password)){ //No password
            $error->add('empty_password', __('<strong>ERROR</strong>: Password field is empty.'));
        }

        return $error;
    }

    //Check if user exists in WordPress database
    $user = get_user_by('email', $email);

    //bad email
    if(!$user){
        $error = new WP_Error();
        $error->add('invalid', __('<strong>ERROR</strong>: Either the email or password you entered is invalid.'));
        return $error;
    }
    else{ //check password
        if(!wp_check_password($password, $user->user_pass, $user->ID)){ //bad password
            $error = new WP_Error();
            $error->add('invalid', __('<strong>ERROR</strong>: Either the email or password you entered is invalid.'));
            return $error;
        }else{
            return $user; //passed
        }
    }
}, 20, 3);

Wp-login.php এ "ব্যবহারকারী নাম" পাঠ্যটি "ইমেল" এ পরিবর্তন করুন

মূল ফাইলগুলি সম্পাদনা না করে আমরা "ব্যবহারকারী নাম" পাঠ্যটিকে "ইমেল" এ পরিবর্তন করতে গেটটেক্সট ফিল্টার ব্যবহার করতে পারি ।

add_filter('gettext', function($text){
    if(in_array($GLOBALS['pagenow'], array('wp-login.php'))){
        if('Username' == $text){
            return 'Email';
        }
    }
    return $text;
}, 20);

আমি আমার ব্লগ http://www.thebinary.in/blog/wordpress-login- using- email / এও একটি বিস্তারিত নিবন্ধ লিখেছি


2
উত্তম উত্তর নিশান্ত
অ্যান্ড্রু বার্টেল

দরকারী! আমার ক্ষেত্রে আমি কেবল ইমেল বিশেষ অক্ষরগুলি সরিয়ে এটিকে একটি ব্যবহারকারীর নাম হিসাবে তৈরি করি। সুতরাং user@example.com ইউজার_সেম্পল_কম হয়ে যায় এবং এটি কাজ করে।
wpcoder

6

এটি সম্ভব, আপনাকে অবশ্যই নামের জন্য ফিল্টারটি পরিবর্তন করতে হবে।

// remove the default filter
remove_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );
// add custom filter
add_filter( 'authenticate', 'fb_authenticate_username_password', 20, 3 );
function fb_authenticate_username_password( $user, $username, $password ) {

    // If an email address is entered in the username box, 
    // then look up the matching username and authenticate as per normal, using that.
    if ( ! empty( $username ) )
        $user = get_user_by( 'email', $username );

    if ( isset( $user->user_login, $user ) )
        $username = $user->user_login;

    // using the username found when looking up via email
    return wp_authenticate_username_password( NULL, $username, $password );
}

একটি বিকল্প একটি প্লাগইন, সেখানে আপনি গুগল ওডার মাধ্যমে প্লাগইন রেপোতে খুঁজে পান; সম্ভবত এই প্লাগইন


উত্তরের জন্য ধন্যবাদ তবে আপনি আমার পোস্টটি পড়েছেন কিনা তা আমি নিশ্চিত নই বা আমি যথেষ্ট পরিষ্কার ছিলাম না। আমি পরেরটির জন্য ক্ষমা চেয়ে নিচ্ছি। আমার মূল পোস্টে আমি WP_Email_Login প্লাগইন উল্লেখ করেছি; আপনার কোড এবং লিঙ্কটি সঠিক প্লাগইন থেকে এসেছে। এখানে আমার আসল পোস্টটি রয়েছে: "প্রথমে আমি ডাব্লুপি_ইমেইল_লগিনকে দেখে কেবল আনন্দিত হয়েছি কেবলমাত্র আপনি এখনও লগইন করার জন্য আপনার ব্যবহারকারীর নামটি ব্যবহার করতে পারেন তা খুঁজে বের করার জন্য।" <--- সমস্যাটি দেখুন আমি এখনও একটি ব্যবহারকারীর নাম ব্যবহার করতে পারি তাই এই প্লাগইনটি কাজ করবে না। যেহেতু আমি ব্যবহারকারীর নাম ব্যবহার করতে পারি না আমি ইমেল ঠিকানার সমান করতে ব্যবহারকারী নামটি জোর করে রেজিস্টার ফাংশনটিকে ওভাররাইড করার কথা ভাবছি।
এজেন্টমিথ 666

তবে আমি মূল ফাইলগুলি সম্পাদনা না করে এটি সম্পাদন করার উপায় অনুসন্ধান করছি। যদি এটি সম্ভব না হয় তবে তা ঠিক আছে তবে আমি কোনওভাবেই জানতে চাই। ধন্যবাদ!
এজেন্টমিথ 666

মূল ফাইলগুলি সম্পাদনা না করেই এটি একটি উপায়। একটি প্লাগইনে কোডটি অনুলিপি করুন, সক্রিয় করুন এবং প্রস্তুত।
বুল্টেজ করুন

4

উপরের কোড ব্যবহার:

// Change login credentials
// remove the default filter
remove_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );
// add custom filter
add_filter( 'authenticate', 'my_authenticate_username_password', 20, 3 );
function my_authenticate_username_password( $user, $username, $password ) {

    // If an email address is entered in the username box, 
    // then look up the matching username and authenticate as per normal, using that.
    if ( ! empty( $username ) ) {
        //if the username doesn't contain a @ set username to blank string
        //causes authenticate to fail
        if(strpos($username, '@') == FALSE){
                $username = '';
            }
        $user = get_user_by( 'email', $username );
        }
    if ( isset( $user->user_login, $user ) )
        $username = $user->user_login;

    // using the username found when looking up via email
    return wp_authenticate_username_password( NULL, $username, $password );
} 

আমাদের যা যা করতে হয়েছিল তা পরীক্ষা করে দেখানো হয়েছিল যে প্রদত্ত ব্যবহারকারীর নামটি কমপক্ষে কোনও ইমেলের মতো দেখাচ্ছে এবং যদি ব্যবহারকারীর নামটি নাশকতা না করে।


বরং জন্য আদিম STRING চেক চেয়ে '@'ব্যবহারকারীর নাম, ওয়ার্ডপ্রেস হয়েছে একটি সহজ বিল্ট-ইন ফাংশন: sanitize_email ফিরে আসবে পারেন একটি বৈধ ইমেইল ঠিকানা বিন্যাস অথবা কিছুই:sanitize_email('email¬!"@business_com'); // Returns nothing
indextwo

3

এটি ইতিমধ্যে আছে WP-CORE!

এখন ওয়ার্ডপ্রেস ইমেইল ব্যবহারকারীর নাম হিসাবে নিবন্ধভুক্ত করার অনুমতি দেয়। তবে আপনি যদি ইতিমধ্যে নিবন্ধিত ব্যবহারকারীদের সম্পর্কে কথা বলছেন তবে তালিকাভুক্ত উত্তরগুলি চেষ্টা করে দেখুন।


1

উপরের কোডটিতে সামান্য পরিবর্তনগুলি একটি মার্জিত সমাধান তৈরি করার জন্য প্রয়োজনীয় সমস্ত কিছু হওয়া উচিত। অনুমোদন হুক ডকুমেন্টেশন বলে যে হয় একটি WP_Userবস্তু বা WP_Errorঅবজেক্ট ফিরিয়ে দিতে হবে।

Wp_authenticate_username_password ফাংশন জন্য সোর্স কোড কিছু বেশ সহজ চেকের মাধ্যমে রান; আমরা এই চেকগুলি যেভাবে সম্পন্ন করেছি তার পুনরায় প্রতিলিপি করতে পারি WP_Errorএবং ইমেল ঠিকানাটি মোকাবেলা করতে একটি নতুন অবজেক্ট তৈরি করতে পারি। বিকল্পভাবে, আমরা এমনকি wp_authenticate_username_passwordকোডটি জ্যাক করতে এবং আমরা চাইলে এটি সংশোধন করতে পারতাম , যদিও আপনি কীভাবে কীভাবে কাজ করে তা কাস্টমাইজ করতে না চাইলে এটিকে অপ্রয়োজনীয় বলে মনে হয়। নীচের কোডটি কৌশলটি করা উচিত: (যদিও আমি নিজে এটি পরীক্ষা করে নি ...)

// Remove the default authentication function
remove_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );

// Add the custom authentication function
add_filter( 'authenticate', 'custom_authenticate_username_password', 20, 3 );

function custom_authenticate_username_password( $user, $username, $password ) {

    // Get the WP_User object based on the email address
    if ( ! empty( $username ) ) {
        $user = get_user_by( 'email', $username );
    }

    // Return a customized WP_Error object if a WP_User object was not be returned (i.e. The email doesn't exist or a regular username was provided)
    if ( ! $user ) {
        return new WP_Error( 'invalid_username_email', sprintf( __( '<strong>ERROR</strong>: Invalid username. Please log in with your email address. <a href="%s" title="Password Lost and Found">Lost your password</a>?' ), wp_lostpassword_url() ) );
    }

    // Hand authentication back over to the default handler now that we a have a valid WP_User object based on the email address
    return wp_authenticate_username_password( null, $username, $password );
}

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