Я ищу API, который позволит мне войти в систему пользователя, передав ему имя пользователя и пароль. У кого-нибудь есть опыт с этим?
Чтобы уточнить, я пытаюсь создать поле входа AJAX, которое отображается в виде всплывающего окна на домашней странице, и не обновлять страницу в случае неправильных учетных данных, а только при правильном входе в систему. Итак, вот что я сделал до сих пор:
Обновить
Теперь я загружаю форму входа на своей домашней странице, затем при отправке запускаю запрос AJAX, который отправляет учетные данные этому сценарию:
function user_login_submit_try() {
global $user;
$uid = user_authenticate($_POST['name'],$_POST['pass']);
$arr = array ('name'=>$_POST['name'],'pass'=>$_POST['pass']);
if ($uid){
$user = user_load($uid);
user_login_finalize($arr);
}
echo drupal_json_encode($uid);
exit;
};
Пока это работает, но мои опасения связаны с проблемами безопасности (как упомянуто googletorp); Похоже, что ни один из API, который я использовал в этом скрипте, не очистил данные в любом случае.
Кто-нибудь увидит лучший способ сделать это?
Ответы:
Это может помочь кому-то:
Лучшая версия на основе комментария:
источник
hook_user_insert
но функции выше в ответе хотят пароль в качестве исходного простого текста. Я думаю, мне нужно попробоватьhook_form_alter
вместо этого ...Для этого не существует простой функции API.
Вы можете сделать то, что делает Drupal:
Перезапишите
global $user
.Обрабатывать сессии
Шаг 2 и 3 см.
user_login_submit()
Все эти функции основаны на вызове из формы. Обычный процесс заключается в том, что обработчики проверки проверяют вводимые пользователем данные и возвращают идентификатор пользователя, если проверка прошла успешно. Затем обработчик отправки обрабатывает фактический вход пользователя в систему и вызов пользователя.
источник
$form_state['value']['name'] = $_POST['name']
и т. д.$form_state
переменную. Есть много хороших проверок безопасности, которые вы могли бы в противном случае потерять и открыть свой сайт для атак. Когда дело доходит до входа пользователя, вы не хотите терять эту безопасность.Если вам нужно получить объект пользователя для учетной записи, для которой вы знаете имя пользователя и пароль, то вы можете использовать следующий код:
$account
будет,FALSE
если пользовательский объект не может быть найден или загружен.Вы должны использовать этот код, когда, например, ваш модуль получает имя пользователя и пароль в качестве ввода от пользователя, он проверяет, верны ли они, и затем что-то делает с объектом пользователя.
Если вы пишете модуль, которому нужно выдать себя за пользователя, чтобы написать комментарий, или делаете что-то еще, что должно получиться так, как это делает пользователь, что и делает модуль отслеживания проблем проекта при закрытии отчета о проблеме, который был в фиксированный статус на две недели (в этом случае добавляется комментарий «Автоматически закрыто - проблема исправлена на 2 недели без активности», в результате чего пользователь «Системное сообщение» пишет), тогда вам не нужны имя пользователя и пароль. Вы просто загружаете пользовательский объект, для которого вы знаете идентификатор пользователя.
Насколько я знаю, с кодом, о котором я сообщил, проблем безопасности нет.
Вы можете ограничить количество неудачных входов в систему; или временно заблокировать IP-адрес, который пытается войти в систему безуспешно или пытается выполнить другой вход в систему в течение короткого времени.
источник
Этот код действительно работает
источник
Вычистил ответ из вышесказанного. Проверка пользователя и пароля является дополнительной функцией. Кроме того, поддельное form_state должно быть переменной для передачи по ссылке на функцию, иначе она выдаст ошибку.
Отсюда имеем:
источник
Пользователь получит сеанс, а также будет авторизован на других страницах:
источник
Иногда нам нужен быстрый вход по URL или забытый пароль администратора. Просто реализуйте ниже две функции, чтобы войти как пользователь 1 в Drupal.
источник