0

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

我之前使用过像频道条目这样的 EE API,但这对我来说是新的。

我计划创建一个模块类,比如“Userapi”和一个方法“login_user”,并在操作表中为此注册一个操作。我会得到一个 id 说 '25' 然后我可以使用 url ' http://mydomain.com/index.php?ACT=25 ' 并且工作正常。

问题是移动开发团队将安装模块,他们如何知道登录功能的操作 ID。他们不应该去数据库检查。应该有一些方法可以向他们提供该操作 ID,但我无法弄清楚如何?

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

彼得回答后更新:

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

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

谢谢

4

1 回答 1

0

如果它是定制的(单个项目使用),则操作 ID 在安装时永远不会更改,因此您可以在移动应用程序中对其进行硬编码?

否则,您将需要调用来检索操作 ID,有 2 种方式浮现在脑海中:

  1. 创建一个标签输出函数,并让它将 Action ID 输出到模板中,然后您可以向返回 Action ID 的移动开发人员提供特定的 URL。

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

要获取这两种方法的操作 ID:

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

您可能要考虑使用安全表单,因此获取相同的代码来生成 XID,可以通过相同的请求(可能是 JSON 对象)传回,然后移动登录可以使用除了 Action 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');

可以找到类似的登录:

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

和会员注销:

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

更新

安全并不意味着 https,而是表单是由有效来源而不是黑客发布的!

进一步澄清

假设移动开发团队正在处理登录问题。他们需要一个包含用户名和密码输入的表单,他们还需要 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 包含在他们创建的表单中。

您不需要另一个附加组件来捕获实际登录的新操作,因为 EE 会为您完成。

于 2013-06-01T15:08:42.460 回答