Каков наилучший способ входа пользователя в систему программно в ExpressionEngine

Я создаю приложение, которое позволяет приложению нажимать url-адрес ACT, который затем запускает метод модуля для создания новой записи с помощью API ExpressionEngine. Однако, поскольку нет пользователя, вошедшего в систему / loggin, не разрешается отправлять запись в канал.

каков наилучший способ сделать это. Обход API для УО и отправить запись вручную, или регистрировать пользователей в progamatically..но тогда как это будет работать с сессиями и т. д.?

Если ответ "войти в систему пользователя в " Было бы здорово увидеть образец кода, если это возможно.

спасибо!

2 ответов


Как вы упомянули, есть 2 способа добавить новую запись:

  1. вручную добавить записи базы данных
  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();

этот код должен работать, но у меня не было времени его выполнить, поэтому он считается псевдо-кодом.

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