通过API远程登录Expressionengine用户


Expressionengine login user from remote through API

我试图在表达式引擎中建立一个模块,允许用户通过移动应用程序登录。

我以前使用过像通道条目这样的EE api,但这对我来说是新的。

我计划创建一个模块类说'Userapi'和一个方法'login_user',并在动作表中为此注册一个动作。我将得到一个id说'25',然后我可以使用url 'http://mydomain.com/index.php?ACT=25',这工作得很好。

问题是移动开发团队将安装模块,他们将如何知道登录功能的动作id。他们不应该去数据库查看。应该有一些方法可以提供动作id给他们但我不知道怎么做?

请帮助。如果有更好的方法,我想实现它。

根据Peter的回答更新:

我有点困惑。表单(登录/注册)将在移动应用程序上。表单将数据发布到表达式引擎url,其中EE插件应该处理发布数据并登录或注册用户。

在这种情况下,什么是最合适的方法。url是http,所以它也是一个不安全的协议。

谢谢

如果它是定制的(单个项目使用),动作ID在安装时不会改变,所以你可以在移动应用程序中硬编码它?

否则,您将需要调用来检索操作ID,有两种方法:

  1. 创建一个标签输出函数,并让它输出动作ID到一个模板中,然后你可以提供一个特定的URL给移动开发者返回动作ID。

  2. 创建一个监听特定URL或查询的session_end扩展,它可以拦截并返回相关请求:http://ellislab.com/expressionengine/user-guide/development/extension_hooks/global/session/index.html

获取两种方法的Action ID:

$actionID = $this->EE->functions->fetch_action_id(__CLASS__, 'login_user');

您可能想要考虑使用安全表单,因此获得相同的代码来生成一个XID,可以与相同的请求(可能是JSON对象)一起传递,然后移动登录可以利用此操作ID来提高安全性。

$this->EE->functions->form_declaration($formDetails)

裁判:http://ellislab.com/expressionengine/user-guide/development/reference/functions.html # form-declaration-data-array另外:http://ellislab.com/expressionengine/user-guide/development/guidelines/security.html id13

也不要考虑额外的登录/注册层,直接使用现有的本机EE登录/注册,可以用同样的方式模拟。

使用现有注册的示例:http://www.sidd3.com/stand-alone-member-registration-form-in-expressionengine/

注意:

$actionID = $this->EE->functions->fetch_action_id('Member', 'register_member');

可以在login中找到一个类似的:

$actionID = $this->EE->functions->fetch_action_id('Member', 'member_login');

和成员注销:

$actionID = $this->EE->functions->fetch_action_id('Member', 'member_logout');

:

安全不是指https,而是指表单是由合法来源发布的,而不是黑客!

进一步澄清

让我们假设Mobile开发团队正在开发登录。他们需要一个带有用户名和密码输入的表单,他们还需要2个隐藏字段,1个用于XID(安全检查),1个用于ACT。表单将被提交到网站的根目录(例如www.mydomain.com)。

所有你需要创建的是一个插件,为他们生成隐藏字段(或值)。这个插件可以做以下事情:

$actionID = $this->EE->functions->fetch_action_id("Member", 'member_login');
$formDetails = array('action'     => '',
              'name'           => 'mobile-login',
              'id'             => $this->EE->TMPL->form_id,
              'class'          => $this->EE->TMPL->form_class,
              'hidden_fields'  => array('ACT' => $actionID),
              'secure'         => TRUE
);
return $this->EE->functions->form_declaration($formDetails);

如果在根模板组中名为"mobile-login"的模板中使用:

{exp:your_plugin_name form_id="my_id" form_class="my_class"}

这会将下面的内容呈现到使用它的模板中:

<form class="my_class" id="my_id" name="mobile-login" method="post" action="http://www.my-domain.com"> 
    <div class="hiddenFields">
        <input type="hidden" name="XID" value="8b13dcd4afa21fe00065319e92a53d8e72a4f687">
        <input type="hidden" name="ACT" value="15">
        <input type="hidden" name="site_id" value="1"> 
    </div>

所以移动开发者可以直接使用XID和ACT,也可以将其包含在他们创建的表单中。

您不需要另一个附加组件来捕获实际登录的新ACTion,因为EE已经为您完成了。