Каков наилучший способ входа пользователя в систему программно в ExpressionEngine
Я создаю приложение, которое позволяет приложению нажимать url-адрес ACT, который затем запускает метод модуля для создания новой записи с помощью API ExpressionEngine. Однако, поскольку нет пользователя, вошедшего в систему / loggin, не разрешается отправлять запись в канал.
каков наилучший способ сделать это. Обход API для УО и отправить запись вручную, или регистрировать пользователей в progamatically..но тогда как это будет работать с сессиями и т. д.?
Если ответ "войти в систему пользователя в " Было бы здорово увидеть образец кода, если это возможно.
спасибо!
2 ответов
Как вы упомянули, есть 2 способа добавить новую запись:
- вручную добавить записи базы данных
- используйте API записей канала (http://expressionengine.com/user_guide/development/api/api_channel_entries.html)
основные отличия заключаются в том, что записи, добавленные с помощью API, будут:
- выполните все обычные проверки данных (т. е. поля, которые помечены как обязательные, не должны быть пустыми)
- выполнить любой Сторонние расширения, которые установили
- держите статистику сайта в курсе (например, количество сообщений автора)
добавление записи вручную достаточно легко для простых каналов, но становится более сложным, если вы используете сторонние типы полей, которые используют дополнительные таблицы.
чтобы войти в систему, вам просто нужно:
// Get the member's id (the member must have permissions to post entries)
$member_id = 1;
// Create session
$this->EE->session->create_new_session($member_id);
используйте api записей канала, чтобы добавить запись, а затем:
// Log user back out
$this->EE->session->destroy();
когда вы законченный.
вы захотите взглянуть на Auth.PHP класс в ./система/библиотеки/авт.РНР. Этот класс является абстракцией API аутентификации и позволяет делать именно то, что вы хотите. Функция "loggin как пользователь" использует эти же методы, а также модуль-член.
вы также можете взглянуть на модуль аутентификации (который является бесплатным), чтобы получить представление о том, как другие работают с Auth класс.
https://objectivehtml.com/authenticate
вот некоторый псевдо-код для использования:
// Fetch the member from the DB using whatever logic you need
$this->EE->db->where('username', 'some-username');
$member = $this->EE->db->get('members');
$this->EE->load->library('auth');
// Load a new Auth_result object which logs in the member
$authed = new Auth_result($member->row());
$authed->start_session($cp_session = FALSE);
$member->free_result();
этот код должен работать, но у меня не было времени его выполнить, поэтому он считается псевдо-кодом.
Я также должен добавить, что я не уверен, что это даже лучший способ решить вашу проблему. Я просто отвечаю на вопросы "как программно войти в систему пользователя, не зная их пароль и без отправки форма входа."