我在我的网站上使用joomla 3.1.1 stable
我有一个带有电子邮件和密码的传统登录系统。
我想添加使用其他网站的ID登录的可能性。网站B. B的ID是45678469687等数字,密码与网站A相同。
我在plugins / authentication / new
创建了一个基于原始插件的插件这是new.php的代码
defined('_JEXEC') or die;
class PlgAuthenticationNew extends JPlugin
{
public function onUserAuthenticate($credentials, $options, &$response)
{
$response->type = 'New';
// Joomla does not like blank passwords
if (empty($credentials['password']))
{
$response->status = JAuthentication::STATUS_FAILURE;
$response->error_message = JText::_('JGLOBAL_AUTH_EMPTY_PASS_NOT_ALLOWED');
return false;
}
if(is_numeric($credentials['username'])){
$db1 = JFactory::getDbo();
$query1 = $db1->getQuery(true)
->select('email_address')
->from('websiteB_db.subscriber')
->where('username=' . $db1->quote($credentials['username']));
$db1->setQuery($query1);
$result1 = $db1->loadResult();
if ($result1)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('id, password')
->from('#__users')
->where('username=' . $db->quote($result1));
$db->setQuery($query);
$result = $db->loadObject();
}else{
$response->status = JAuthentication::STATUS_FAILURE;
$response->error_message = JText::_('JGLOBAL_AUTH_NO_USER');
}
}else{
$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)
{
$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 = JAuthentication::STATUS_SUCCESS;
$response->error_message = '';
//print_r($response); die;
} else {
$response->status = JAuthentication::STATUS_FAILURE;
$response->error_message = JText::_('JGLOBAL_AUTH_INVALID_PASS');
}
}
else
{
$response->status = JAuthentication::STATUS_FAILURE;
$response->error_message = JText::_('JGLOBAL_AUTH_NO_USER');
}
}
}
当我使用电子邮件登录时,没问题。 当我使用网站B id登录时,我有这个奇怪的消息: 错误:此电子邮件已经注册。
有什么想法吗? 非常感谢你的帮助!