我试图在表达式引擎中建立一个模块,允许用户通过移动应用程序登录。
我以前使用过像通道条目这样的EE api,但这对我来说是新的。
我计划创建一个模块类说'Userapi'和一个方法'login_user',并在动作表中为此注册一个动作。我将得到一个id说'25',然后我可以使用url 'http://mydomain.com/index.php?ACT=25',这工作得很好。
问题是移动开发团队将安装模块,他们将如何知道登录功能的动作id。他们不应该去数据库查看。应该有一些方法可以提供动作id给他们但我不知道怎么做?
请帮助。如果有更好的方法,我想实现它。
根据Peter的回答更新:
我有点困惑。表单(登录/注册)将在移动应用程序上。表单将数据发布到表达式引擎url,其中EE插件应该处理发布数据并登录或注册用户。
在这种情况下,什么是最合适的方法。url是http,所以它也是一个不安全的协议。
谢谢
如果它是定制的(单个项目使用),动作ID在安装时不会改变,所以你可以在移动应用程序中硬编码它?
否则,您将需要调用来检索操作ID,有两种方法:
-
创建一个标签输出函数,并让它输出动作ID到一个模板中,然后你可以提供一个特定的URL给移动开发者返回动作ID。
-
创建一个监听特定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已经为您完成了。