Drupal 7 программно войти в систему пользователя - PullRequest
17 голосов
/ 10 ноября 2011

После того, как я только что зарегистрировал новую учетную запись и создал профиль, как мне войти в систему?

Я пробовал:

global $user;
$user = user_load($account->uid);

или

global $user;
$user = user_load(array('mail' => $_POST['email'], 'pass' => trim($_POST['password'])));

, но ни одна из них не работает, и вторая ошибка приводит к ошибке в array_flip.

Ответы [ 5 ]

27 голосов
/ 12 декабря 2012

Я собираюсь ответить на этот вопрос для дальнейшего использования, потому что третий ответ выше неправильный, и первый ответ будет работать, но не нужен (он повторяет опыт пользователя, отправляющего форму входа, вызывая все валидаторы и т. Д., И по-видимому, вы уже сделали эту проверку, или вы не будете пытаться войти в систему напрямую.

Это будет работать как положено, при условии, что у вас есть $username и $password из вашей собственной формы или функции, и вы знаете, что пользователь не вошел в систему:

if ($uid = user_authenticate($username, $password)) {
  global $user;
  $user = user_load($uid);

  $login_array = array ('name' => $username);
  user_login_finalize($login_array);
}

Сначала вы подтвердите имя пользователя и пароль, которые у вас есть. Если вы вернули ненулевой UID, аутентификация прошла успешно. Вы создаете массив, который предоставляет один, возможно, необходимый фрагмент информации, который был в исходной форме входа в систему, и передаете его в user_login_finalize(), который делает все остальное (не только восстановление сеанса, но и запись вход в систему правильно и вызов входа в систему).

14 голосов
/ 10 ноября 2011

Drupal делает это, используя user_login_finalize из user_login_submit, вы можете сами вызывать то же самое с помощью этого кода:

$form_state['uid'] = $account->uid;
user_login_submit(array(), $form_state);
8 голосов
/ 20 сентября 2012

Вы можете войти в систему программно в D7, используя следующий код.

global $user;
$user = user_load($uid);
drupal_session_regenerate();

Это должно войти в систему пользователя с указанным идентификатором пользователя.

1 голос
/ 19 февраля 2017

Используйте следующий код, чтобы программно создать учетную запись пользователя в Drupal 8.

$language = \Drupal::languageManager()->getCurrentLanguage()->getId();

$user = \Drupal\user\Entity\User::create();


//Mandatory settings

$user->setPassword('password');

$user->enforceIsNew();

$user->setEmail('email');

$user->setUsername('user_name');//This username must be unique and accept only a-Z,0-9, - _ @ .

//Optional settings
$user->set("init", 'email');

$user->set("langcode", $language);

$user->set("preferred_langcode", $language);

$user->set("preferred_admin_langcode", $language);

//$user->set("setting_name", 'setting_value');

$user->activate();

//Save user

$res = $user->save();
0 голосов
/ 20 декабря 2017
/**   
*  Drupal 7 Programmatically user Login   
*/

    function hook_menu(){
      $itmes['user/form'] = array(
       'title' => t('Example Form'),
       'description' => 'Drupal Example Form',
       'page callback' => 'drupal_get_form',
       'page arguments' => array('example_form'),
       'access callback' => TRUE,
       'type' => MENU_LOCAL_TASK,
    );
      return $itmes;
   }

   function otp_login_form($form, &$form_state){
    $form['name'] = array(
     '#type' => 'textfield',
     '#title' => t('Username'),
     '#description' => t('Enter your @site_name username.',   
            array('@site_name'=> variable_get('site_name'))),
     '#required' => TRUE,
     '#size' => 60,
     '#maxlength' => 60,
     '#weight' => 2,
    );
    $form['password'] = array(
     '#type' => 'password',
     '#title' => t('Password'),
     '#description' => t('Enter the password that accompanies your  username.'),
     '#required' => TRUE,
     '#size' => 60,
     '#maxlength' => 60,
     '#weight' => 3,
    );
    $form['submit'] = array(
     '#type' => 'submit',
     '#value' => t('Login'),
     '#weight' => 4,
    );

    return $form;
  }

  function otp_login_form_submit($form, &$form_state){
     if(user_authenticate($form_state['values']['name'], $form_state['values']['password'])) {
     $user_obj = user_load_by_name($form_state['values']['name']);
     $form_state['uid'] = $user_obj->uid;      
     user_login_submit($form,$form_state);
     return true;
   }
   else {
     form_set_error('name', t('Sorry, unrecognized username or password.')); 
     watchdog('user', 'Login attempt by unregistered user %user.', array('%user' => $form_state['values']['name']));

   }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...