Sitemizde, Joomla 1.5 kurulumunun bitişiğinde bulunan bağımsız bir komut dosyası var. Komutumuza erişimi kısıtlamak için Joomla kimlik doğrulamasını kullanıyoruz. Bu noktada, herhangi bir yetkisiz kullanıcıyı giriş yapmak için Joomla sitesine yönlendiriyoruz. Yine de bizim betikimizde bir giriş yeteneği eklemek istiyoruz. Bir kullanıcı adı/şifre kullanarak harici bir komut dosyasından joomla'ya nasıl giriş yapacağını bilen var mı? Teşekkürler!Bir dış komut dosyası aracılığıyla joomla'ya nasıl giriş yapılır?
cevap
<?php
//http://domain.com/script/script.php?username=username&passwd=password
define('_JEXEC', 1);
define('JPATH_BASE', '../');
define('DS', DIRECTORY_SEPARATOR);
require_once('../configuration.php');
require_once (JPATH_BASE .DS.'includes'.DS.'defines.php');
require_once (JPATH_BASE .DS.'includes'.DS.'framework.php');
require_once (JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php');
/* Create the Application */
$mainframe =& JFactory::getApplication('site');
jimport('joomla.plugin.helper');
$credentials = array();
$credentials['username'] = JRequest::getVar('username', '', 'method', 'username');
$credentials['password'] = JRequest::getVar('passwd', '', 'method', 'passwd');
//perform the login action
$error = $mainframe->login($credentials);
$user = JFactory::getUser();
//now you are logged in
$mainframe->logout();
//now you are logged out
Aşağıdaki çözümlerden birini öneririm:
- bir login plugin belirli için komut dosyası yazın. (. CURL de çerezleri başa çıkabilir) Normal giriş formunun bir SONRASI İsteği yapmak için komut CURL kullanarak
- (En basit): Joomla tarafından kimlik doğrulaması !, ama .htaccess tarafından vermeyin. Joomla 3.x için
aşağıda daha temiz ve yararlı olur. Aşağıdaki kodlar kodlanmış kullanıcı adı ve şifreyi doğrulayacaktır. Kullanıcı varsa, index.php sayfasına yönlendirilir.
<?php
/**
* Joomla! External authentication script
*
* @author vdespa
* Version 1.0
*
* Code adapted from /index.php
*
* @package Joomla.Site
*
* @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
if (version_compare(PHP_VERSION, '5.3.1', '<'))
{
die('Your host needs to use PHP 5.3.1 or higher to run this version of Joomla!');
}
/**
* Constant that is checked in included files to prevent direct access.
* define() is used in the installation folder rather than "const" to not error for PHP 5.2 and lower
*/
define('_JEXEC', 1);
if (file_exists(__DIR__ . '/defines.php'))
{
include_once __DIR__ . '/defines.php';
}
if (!defined('_JDEFINES'))
{
define('JPATH_BASE', __DIR__);
require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
// Instantiate the application.
$app = JFactory::getApplication('site');
jimport('joomla.plugin.helper');
// JFactory
require_once (JPATH_BASE .'/libraries/joomla/factory.php');
// Hardcoded for now
$credentials['username'] = 'admin';
$credentials['password'] = 'admin';
// Get a database object
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('id, password')
->from('#__users')
->where('username=' . $db->quote($credentials['username']));
$db->setQuery($query);
$result = $db->loadObject();
if ($result)
{
$match = JUserHelper::verifyPassword($credentials['password'], $result->password, $result->id);
if ($match === true)
{
// Bring this in line with the rest of the system
$user = JUser::getInstance($result->id);
echo 'Joomla! Authentication was successful!' . '<br>';
echo 'Joomla! Token is:' . JHTML::_('form.token');
//perform the login action
$error = $app->login($credentials);
$logged_user = JFactory::getUser();
var_dump($logged_user);
//redirect logged in user
$app->redirect('index.php');
}
else
{
// Invalid password
// Prmitive error handling
echo 'Joomla! Token is:' . JHTML::_('form.token') . '<br>';
die('Invalid password');
}
} else {
// Invalid user
// Prmitive error handling
die('Cound not find user in the database');
}
kullanılamaz. Joomla oturumu başlatmak hala mümkün mü? –
Çalıştığı' – frthjf
Bunu yaptım ve gayet iyi çalışıyor. varsayarsak özel giriş komut true dönecektir şifreyi kontrol --- sen orada php kod parçacığı
$phpass = new PasswordHash(10, true);
$password= "unhashed user password";
$db_password = 'Your hashed password in the database';
$ok= $phpass->CheckPassword($password, $db_password);
?>
Ve İşte
-Go to Joomla installation directory
-Copy PasswordHash.php from this directory /root/libraries/phpass/ to your external script's folder
-Include the PasswordHash.php in login.php
-Create an instance of PasswordHash like this:
login.php
olduğu iki şifre eşleşir. Not: Veritabanından otomatik olarak kontrol etmek için bir sorgu yazmanız gerekiyor.
Mükemmel! Tam olarak aradığım şey bu. – user77413
'$ error = $ mainframe-> login ($ credentials);' yanılıyor; '$ Result = $ mainframe-> giriş ($ kimlik) gibi görünmelidir; kimlik bilgileri daha sonra $, Joomla 3.4.1 Kullanıcı zaten başka yöntemle bu uygulamada doğrulanır ne olur – simon