私の目的はJoomla ユーザ名とパスワードが外部アプリケーションから有効であることを確認することです。ユーザーがシステムにログインしている必要はなく、アカウントが存在するだけです。 Joomla認証(JOOMLA_PATH/plugins/authentication/joomla)に基づいて独自の認証プラグインを作成することにしました。私はそれを呼び出すときJoomla 1.7外部アプリケーションからの認証
<?php
define('_JEXEC', 1);
define('JPATH_BASE', 'C:\xampp\htdocs\joomla');
define('DS', DIRECTORY_SEPARATOR);
require_once (JPATH_BASE .DS.'includes'.DS.'defines.php');
require_once (JPATH_BASE .DS.'includes'.DS.'framework.php');
include("Webservice.php");
$credentials = array(
'username' => 'test',
'password' => 'test');
$options = array();
$response = array();
$auth = new plgAuthenticationWebservice();
$auth->onUserAuthenticate($credentials, $options, &$response);
var_dump($response);
しかし:私はそれをtest_auth.phpと呼ばれる、
<?php
/**
* @version $Id: joomla.php 21097 2011-04-07 15:38:03Z dextercowley $
* @copyright Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// No direct access
defined('_JEXEC') or die;
jimport('joomla.plugin.plugin');
/**
* Joomla Authentication plugin
*
* @package Joomla.Plugin
* @subpackage Authentication.Webservice
* @since 1.5
*/
class plgAuthenticationWebservice extends JPlugin
{
/**
* This method should handle any authentication and report back to the subject
*
* @access public
* @param array Array holding the user credentials
* @param array Array of extra options
* @param object Authentication response object
* @return boolean
* @since 1.5
*/
function onUserAuthenticate($credentials, $options, &$response)
{
jimport('joomla.user.helper');
$response->type = 'Webservice';
// Joomla does not like blank passwords
if (empty($credentials['password'])) {
$response->status = JAUTHENTICATE_STATUS_FAILURE;
$response->error_message = JText::_('JGLOBAL_AUTH_EMPTY_PASS_NOT_ALLOWED');
return false;
}
// Initialise variables.
$conditions = '';
// Get a database object
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('id, password');
$query->from('#__users');
$query->where('username=' . $db->Quote($credentials['username']));
$db->setQuery($query);
$result = $db->loadObject();
if ($result) {
$parts = explode(':', $result->password);
$crypt = $parts[0];
$salt = @$parts[1];
$testcrypt = JUserHelper::getCryptedPassword($credentials['password'], $salt);
if ($crypt == $testcrypt) {
$user = JUser::getInstance($result->id); // Bring this in line with the rest of the system
$response->email = $user->email;
$response->fullname = $user->name;
if (JFactory::getApplication()->isAdmin()) {
$response->language = $user->getParam('admin_language');
}
else {
$response->language = $user->getParam('language');
}
$response->status = JAUTHENTICATE_STATUS_SUCCESS;
$response->error_message = '';
} else {
$response->status = JAUTHENTICATE_STATUS_FAILURE;
$response->error_message = JText::_('JGLOBAL_AUTH_INVALID_PASS');
}
} else {
$response->status = JAUTHENTICATE_STATUS_FAILURE;
$response->error_message = JText::_('JGLOBAL_AUTH_NO_USER');
}
}
}
私は認証にアクセスするために、私のプラグインに1以上のファイルを追加し、それはこのように書きます:私は名前だけを変えました
Warning: Missing argument 1 for JPlugin::__construct(), called in C:\xampp\htdocs\joomla\plugins\authentication\Webservice\test_auth.php on line 25 and defined in C:\xampp\htdocs\joomla\libraries\joomla\plugin\plugin.php on line 57
Fatal error: Call to a member function attach() on a non-object in C:\xampp\htdocs\joomla\libraries\joomla\base\observer.php on line 41
私は間違っていますか? 私はjoomlaの外にあり、すべてのPHPスクリプトを置くことができ、require_once(JPATH_BASE .DS.'includes'DS.'defines.php ')などで動作すると思います。 または、プラグインを作成して、拡張機能利用できないjoomlaフレームワークでは苦労しません。しかし、実際には、define.phpとframework.phpを省略しても動作しません。
Joomla 1.7でプラグインを作成するためのガイドが役立つと思います。
外部アプリケーションではどのような言語を使用していますか? 別のホストにありますか?あなたはJoomlaトークンについて認識していますか? – WooDzu
こちらをご覧まったく同じ質問: http://stackoverflow.com/questions/2176595/joomla-login-authentication-from-external-app – WooDzu
@WooDzu私の外部アプリがJoomlaのと同じホスト上にあり、私が使用してこのためのPHP。私はJoomlaトークンについて認識していません。これはまだjoomla 1.7で使用されていますか? –