下午好,
我正在尝试在Magento admin中创建AJAX登录。但我不知道Magento登录功能和登录操作会发生什么。我对Magento很新,真的很困惑......
我已经知道有两个地方可以办理登录。
/core/Mage/Admin/Model/Session.php
(登录功能)
和
/core/Mage/Adminhtml/controllers/IndexController.php
(登录操作)
返回JSON数据需要做什么?还有 Url (index.php/admin/login
?)来处理它?</ p>
要清楚,我需要回答两个问题才能自己解决。
任何帮助将不胜感激。谢谢大家!
答案 0 :(得分:2)
1)一旦覆盖了IndexController.php,就可以在其中创建AjaxLoginAction。 2)在您的$ .ajax中,您将指定的URL为:
url : Mage::helper("adminhtml")->getUrl("mage_adminhtml/index/AjaxLogin");
//check once if the above url returns your action urls or not
3)在控制器内部,您可以使用以下命令将输出发送回json中的前端:
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($reply));
return;
//where reply can be a text or can be multidimentional arrray`enter code here`
答案 1 :(得分:1)
Magento Admin表单的默认流程为:
1)当验证成功并且用户输入凭证时,magento会将其发送到Admin / Model / Session.php登录功能。 2)请求有2个参数:
- username
- password
- key(we will get into it later below, lets say key is 123456)
- form_key posted with form by default
3)在登录功能中,magento会检查是否有任何用户存在这些凭据。如果是,请将当前管理员用户设置为此用户表单,该表单中输入了凭据。 4)在此之后,magento将控件重定向到adminhtml / index / index / key / 123456 在这里,您可以看到我们在表单中获得的密钥用于保持真实性。
现在,如果你想把它变成ajax,
创建自定义控制器让我们说AjaxloginAction。在其中您可以编写以下功能:
public function AjaxloginAction(){
$params = $this->getRequest()->getParams();
$username = $params['username'];
$password = $params['password'];
//call the model function here
$flag = Mage::getModel('admin/session')->login($username, $password);
if($flag == true){
//user if logged in, do further redirection or processing
}
else{
// invalid credentals, return warning on frontend
}
}
要确保session.php模型默认不重定向,请覆盖它并将其更改为以下内容:
public function login($username, $password, $request = null)
{
if (empty($username) || empty($password)) {
return;
}
try {
/** @var $user Mage_Admin_Model_User */
$user = Mage::getModel('admin/user');
$user->login($username, $password);
if ($user->getId()) {
$this->renewSession();
if (Mage::getSingleton('adminhtml/url')->useSecretKey()) {
Mage::getSingleton('adminhtml/url')->renewSecretUrls();
}
$this->setIsFirstPageAfterLogin(true);
$this->setUser($user);
$this->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
$requestUri = $this->_getRequestUri($request);
if ($requestUri) {
Mage::dispatchEvent('admin_session_user_login_success', array('user' => $user));
//header('Location: ' . $requestUri);
//exit;
return true;
}
} else {
return 'Invalid User Name or Password.';
}
} catch (Mage_Core_Exception $e) {
Mage::dispatchEvent('admin_session_user_login_failed',
array('user_name' => $username, 'exception' => $e));
if ($request && !$request->getParam('messageSent')) {
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
$request->setParam('messageSent', true);
}
}
return $user;
}
Hope this helps. :)