В качестве варианта ответа @ Martin компонент может вернуть объект JUser
, связанный с данными учетными данными. Следующий компонент протестирован в Joomla 2.5:
Представление view.raw.php :
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.application.component.view' );
class ExtauthViewLogin extends JView
{
function display( $tpl = null )
{
$username = JRequest::getVar( 'username', 'John Doe' );
$password = JRequest::getVar( 'password', 'rattlesnake' );
jimport('joomla.user.authentication');
$app = JFactory::getApplication();
$credentials = array( "username" => $username, "password" => $password);
$options = array("silent" => true);
$authorized = $app->logout(null, $options);
$authorized = $app->login($credentials, $options);
$user = JFactory::getUser();
echo json_encode($user);
}
}
Обратите внимание на выход до входа . После успешного входа в систему все последующие вызовы с неправильными учетными данными будут возвращать пользователя первого вызова без выхода из системы!
Также обратите внимание на параметр silent . Это заставляет функцию входа в систему корректно возвращаться с истиной или ложью, не вызывая исключений.
controller.php :
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.application.component.controller' );
class ExtauthController extends JController
{
function display($cachable = false, $urlparams = false)
{
$view = JRequest::getVar( 'view', 'login' );
$layout = JRequest::getVar( 'layout', 'default' );
$format = JRequest::getVar( 'format', 'raw' );
$view = $this->getView( $view, $format );
$view->setLayout( $layout );
$view->display();
}
}
Обратите внимание на формат raw
. Это необходимо для того, чтобы joomla возвращала чистый код json вместо всей html-страницы.
Компонент может быть вызван (через ajax) с помощью url:
index.php?option=com_extauth&task=view&format=raw&username=John&password=Doe
Возвращаемый объект JSON будет содержать значения NULL для большинства полей в случае неудачного входа в систему.
Полный компонент - самый простой из возможных, основанный на com_hello
без модели или tmpl.