8

我正在构建一个应用程序,该应用程序允许该应用程序点击一个 ACT url,然后触发一个模块方法以使用 ExpressionEngine API 创建一个新条目。但是,由于没有用户登录/登录,因此不允许向频道提交条目。

做这个的最好方式是什么。绕过 EE api 并手动提交条目,或以编程方式登录用户..但是这将如何与会话等一起工作?

如果答案是“让用户登录”,那么如果可能的话,看看代码示例会很棒。

谢谢!

4

2 回答 2

12

正如您所提到的,有两种方法可以添加新条目:

  1. 手动添加数据库记录
  2. 使用频道条目 API (http://expressionengine.com/user_guide/development/api/api_channel_entries.html)

主要区别在于使用 API 添加的条目将:

  • 执行所有常见的数据验证(即,标记为必填的字段不能为空)
  • 运行已安装的任何 3rd 方扩展
  • 使网站统计数据保持最新(例如,作者的帖子数量)

对于简单的通道,手动添加条目相当容易,但如果您使用的是使用附加表的 3rd 方字段类型,则会变得更加复杂。

要登录会员,您只需要:

// 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();

当你完成时。

于 2012-10-26T09:05:25.283 回答
5

您将要查看 ./system/libraries/Auth.php 中的 Auth.php 类。此类是身份验证 API 的抽象,允许您完全按照自己的意愿行事。“以用户身份登录”功能使用这些相同的方法,以及成员模块。

您还可以查看 Authenticate 模块(它是免费的),以便了解其他人如何使用 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();

这段代码应该可以工作,但我没有时间执行它,这就是它被认为是伪代码的原因。

我还应该补充一点,我不确定这是否是解决您问题的最佳方法。我只是在回答“如何在不知道用户密码且不提交登录表单的情况下以编程方式登录用户”的问题。

于 2012-10-25T17:02:16.730 回答