Bonjour,
Je suis sous Joomla 3.1
Je souhaites permettre aux utilisateurs de se loguer de deux manières:
Je rencontre un problème après avoir crée un nouveau plugin en me basant sur l'originale.
Lorsque je me logue avec le mail et le pass, aucun problème, ça fonctionne.
Par contre lorsque je me logue avec un identifiant smartphone et le pass, j'ai ce message magique:
ERROR: This email is already registered
Merci de votre aide.
Maurice
Je suis sous Joomla 3.1
Je souhaites permettre aux utilisateurs de se loguer de deux manières:
- soit avec la manière traditionnelle(mail + pass)
- soit en utilisant l'identifiant(ex: 125465448995) d'une application smartphone + le même pass.
Je rencontre un problème après avoir crée un nouveau plugin en me basant sur l'originale.
Code PHP:
defined('_JEXEC') or die;
/**
* Joomla Authentication plugin
*
* @package Joomla.Plugin
* @subpackage Authentication.joomla
* @since 1.5
*/
class PlgAuthenticationPhone 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
*/
public function onUserAuthenticate($credentials, $options, &$response)
{
$response->type = 'Joomla';
// 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('phone_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');
}
}
}
Par contre lorsque je me logue avec un identifiant smartphone et le pass, j'ai ce message magique:
ERROR: This email is already registered
Merci de votre aide.
Maurice
Commentaire