Drupal 7 программно регистрирует пользователя в
После того, как вы только что зарегистрировали новую учетную запись и создали профиль, как я могу зарегистрировать пользователя?
Я пробовал:
global $user;
$user = user_load($account->uid);
или
global $user;
$user = user_load(array('mail' => $_POST['email'], 'pass' => trim($_POST['password'])));
но ни одна из них не работает, а вторая приводит к ошибке в файле array_flip.
Ответы
Ответ 1
Я собираюсь ответить на это для будущей справки, потому что третий ответ выше, и первый ответ будет работать, но не нужен (он повторяет опыт пользователя, который отправляет форму входа в систему, вызывая все валидаторы и т.д., и предположительно, вы уже сделали эту проверку, или вы не будете пытаться самостоятельно регистрировать пользователя.
Это будет работать, как ожидается, если у вас есть $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()
, что делает все остальное (не просто регенерирование сеанса, но и правильная регистрация входа и вызов логинов входа).
Ответ 2
Drupal делает это с помощью user_login_finalize
от user_login_submit
, вы можете ссылаться на то же самое самостоятельно с этим кодом:
$form_state['uid'] = $account->uid;
user_login_submit(array(), $form_state);
Ответ 3
Вы можете войти в систему программно в D7, используя следующий код.
global $user;
$user = user_load($uid);
drupal_session_regenerate();
Это должно войти в систему с данным идентификатором пользователя.
Ответ 4
Используйте следующий код для создания программной учетной записи пользователя в 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();
Ответ 5
/**
* 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']));
}
}