تصویر شیرین عبدالهی

ممکن است نام کاربری/کلمه عبور وبسایت شما قابل خاصی داشته باشد که بخواهید کاربران در فرم ورود به سایت آن را رعایت کنند و اگر حسابی با آن مشخصات وجود نداشت، کاربر در همان فرم ورود ثبت نام شده و وارد سایت شود.

در این ماژول، ابتدا فرم لاگین را alter کرده و تابع MODULENAME_login_validate  را به validator های آن اضافه کردم.

در فانکشن  MODULENAME_login_validate پس از مطمئن شدن از اینکه حساب کاربری ای با نام کاربری وارد شده وجود ندارد، یک کاربر جدید میسازم و برای لاگین کردن کاربر، از تکه کد زیر استفاده میکنم :

global $user; 
$user = $account; 
drupal_session_regenerate();

کاربر با موفقیت لاگین شده ولی کاربر را به صفحه پروفایلش هدایت میکنم.در این حالت کاربر پیغام خطایی مشاهده میکند مبنی بر اینکه نام کابری و کلمه ی عبور درست نیست.که علت آن سایر توابع validate فرم ورود اند. برای حل این مشکل توسط تابع drupal_get_messages را صدا زده که تمامی مسج ها را پاک میکند.

//implement hook_form_FORM_ID_alter
function MODULENAME_form_user_login_alter(&$form, $form_state, $form_id) {
    if ($form['#form_id'] == 'user_login') {
        $form['#validate'][] = 'MODULENAME_login_validate';
    }
}

function MODULENAME_login_validate($form, &$form_state) {
    $username = $form_state['values']['name'];
    $password = $form_state['values']['pass'];
    $user = user_authenticate($username, $password);
    $roles = array(2); // authenticated user role
    if ($user == FALSE && !user_load_by_name($username) /* and other validation you want for username-passwors structures */ ) {
        $acc = array(
            'name' => $username,
            'pass' => $password,
            'mail' => $username . '@dummy.com',
            'status' => 1,
            'roles' => $roles, // some roles
        );
        // New user is saved and loaded
        $account = user_save(drupal_anonymous_user(), $acc);
        global $user;
        $user = $account;
        drupal_session_regenerate(); // regenerate a session to login a user
        drupal_get_messages(); // to clear error message generated by user login form
        drupal_set_message('Welcome'); // or other message you want
        drupal_goto('user');
    }
}

//implement hook_form_FORM_ID_alter
function MODULENAME_form_user_login_alter(&$form, $form_state, $form_id) {
    if ($form['#form_id'] == 'user_login') {
        $form['#validate'][] = 'MODULENAME_login_validate';
    }
}

function MODULENAME_login_validate($form, &$form_state) {
    $username = $form_state['values']['name'];
    $password = $form_state['values']['pass'];
    $user = user_authenticate($username, $password);
    $roles = array(2); // authenticated user role
    if ($user == FALSE && !user_load_by_name($username) /* and other validation you want for username-passwors structures */ ) {
        $acc = array(
            'name' => $username,
            'pass' => $password,
            'mail' => $username . '@dummy.com',
            'status' => 1,
            'roles' => $roles, // some roles
        );
        // New user is saved and loaded
        $account = user_save(drupal_anonymous_user(), $acc);
        global $user;
        $user = $account;
        drupal_session_regenerate(); // regenerate a session to login a user
        drupal_get_messages(); // to clear error message generated by user login form
        drupal_set_message('Welcome'); // or other message you want
        drupal_goto('user');
    }
}
برچسب ها: 

افزودن نظر جدید