ব্যবহারকারীর নাম এবং ইমেল উভয়কে অনুমতি দেওয়ার জন্য: প্রথমে বৈধকারক যুক্ত করুন
function YOURMODULE_form_user_login_alter(&$form, &$form_state, $form_id) {
$form['#validate'][1] = 'YOURMODULE_form_user_login_replace_email_validate';
$form['#validate'][2] = 'user_login_authenticate_validate';
$form['#validate'][3] = 'user_login_final_validate';
}
তারপরে ইমেল ঠিকানার মতো দেখাচ্ছে কিনা তা পরীক্ষা করে দেখুন (@ এর আগে এবং পরে এবং পরে কমপক্ষে 1 '।' এর পরে অক্ষর রয়েছে)। যদি এটি হয় তবে ব্যবহারকারীর নাম অনুসারে ইমেল প্রতিস্থাপন করুন:
function YOURMODULE_form_user_login_replace_email_validate(&$form, &$form_state) {
$name = $form_state['values']['name'];
if (strpos($name, '@')) {
$mailParts = explode('@', $name);
if ((int)count($mailParts) === 2) {
$extParts = explode('.', $mailParts[1]);
if (count($extParts) > 1) {
$query = db_select('users', 'u');
$query->distinct();
$query->fields('u', ['uid']);
$query->fields('u', ['name']);
$query->fields('u', ['mail']);
$query->condition('u.mail', $name, '=');
$result = $query->execute()->fetchAllAssoc('name');
if (!empty($result)) {
$name = array_keys($result)[0];
$form_state['values']['name'] = $name;
}
}
}
}
}
আমার একটি নির্দিষ্ট পরিস্থিতি হয়েছিল যখন আমাকে প্রচুর ব্যবহারকারী "পুরানো" প্রমাণীকরণ কাজ করে রেখে কর্মক্ষম সাইটে ইমেল-ভিত্তিক প্রমাণীকরণ যুক্ত করতে হয়েছিল এবং আমি এটি এমনভাবে করেছি।