在ExpressionEngine中以编程方式记录用户的最佳方法是什么

时间:2012-10-25 16:30:48

标签: php expressionengine

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

这样做的最佳方法是什么。绕过EE api并手动提交条目,或者以progamatically方式登录用户..但那么如何处理会话等等?

如果答案是"将用户记录在"如果可能的话,看到代码示例会很棒。

谢谢!

2 个答案:

答案 0 :(得分:12)

如您所述,有两种方法可以添加新条目:

  1. 手动添加数据库记录
  2. 使用Channel Entries API(http://expressionengine.com/user_guide/development/api/api_channel_entries.html)
  3. 主要区别在于使用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();
    

    完成后。

答案 1 :(得分: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();

这段代码应该可行,但我没有时间执行它,这就是为什么它被认为是伪代码。

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