Bonjour à tous,
J'ai besoin de votre aide pour un problème qui me taraude depuis une semaine..
Alors, j'essaie d'avoir la possibilité de me loguer de deux façons sur mon site.
Une première qui est déjà fonctionnelle, qui utilise le mail.
Une deuxième avec un identifiant numérique d'un autre site et une autre base de données, mais avec le même mot de passe que la première méthode.
Alors, pour faire simple, voici un exemple:
Mais lorsque je me logue avec la deuxième méthode, j'ai un message magique:
ERROR: This email is already registered.
Je ne comprends pas pourquoi cet erreur surgit, c'est censé s'afficher à l'inscription d'un nouvel utilisateur...
Voici le code en question qui est basé sur le plugin de login joomla:
Merci infiniment de m'éclairer.
Georges
J'ai besoin de votre aide pour un problème qui me taraude depuis une semaine..
Alors, j'essaie d'avoir la possibilité de me loguer de deux façons sur mon site.
Une première qui est déjà fonctionnelle, qui utilise le mail.
Une deuxième avec un identifiant numérique d'un autre site et une autre base de données, mais avec le même mot de passe que la première méthode.
Alors, pour faire simple, voici un exemple:
Le site A est fait avec joomla 3.1.1
L'utilisateur a son identifiant => usernameATemail.com et son mot de passe => pass123
A l'inscription sur le site A, l'utilisateur est automatiquement inscrit sur le site B et un identifiant numérique lui est attribué, et le même mot de passe est automatiquement copié dans la base de données du site B, ainsi que l'email.
Ne me demandez pas pourquoi c'est comme ça, c'est ce que l'on m'impose à mon lieu de travail...
Donc lorsque l'utilisateur se logue sur le site A avec son mail, aucun soucie.
Lorsqu'il se logue avec son identifiant numérique sur le site A, le code va chercher son mail dans la base de données du site B, et tente de se loguer sur le site A.
L'utilisateur a son identifiant => usernameATemail.com et son mot de passe => pass123
A l'inscription sur le site A, l'utilisateur est automatiquement inscrit sur le site B et un identifiant numérique lui est attribué, et le même mot de passe est automatiquement copié dans la base de données du site B, ainsi que l'email.
Ne me demandez pas pourquoi c'est comme ça, c'est ce que l'on m'impose à mon lieu de travail...
Donc lorsque l'utilisateur se logue sur le site A avec son mail, aucun soucie.
Lorsqu'il se logue avec son identifiant numérique sur le site A, le code va chercher son mail dans la base de données du site B, et tente de se loguer sur le site A.
ERROR: This email is already registered.
Je ne comprends pas pourquoi cet erreur surgit, c'est censé s'afficher à l'inscription d'un nouvel utilisateur...
Voici le code en question qui est basé sur le plugin de login joomla:
Code PHP:
defined('_JEXEC') or die;
class PlgAuthenticationNew extends JPlugin
{
public function onUserAuthenticate($credentials, $options, &$response)
{
$response->type = 'New';
// si mot de passe vide
if (empty($credentials['password']))
{
$response->status = JAuthentication::STATUS_FAILURE;
$response->error_message = JText::_('JGLOBAL_AUTH_EMPTY_PASS_NOT_ALLOWED');
return false;
}
// si l'identifiant est numérique, on cherche le mail
if(is_numeric($credentials['username'])){
$option = array();
$option['driver'] = 'mysqli';
$option['host'] = '192.168.5.127';
$option['user'] = 'root';
$option['password'] = 'password';
$option['database'] = 'websiteB_db';
$db1 = & JDatabase::getInstance( $option );
$query1 = $db1->getQuery(true)
->select('email_address')
->from('subscriber')
->where('username=' . $db1->quote($credentials['username']));
$db1->setQuery($query1);
$result1 = $db1->loadResult();
// si un résultat est reçu
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{
// si l'identifiant n'est pas numérique
$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;
// ici $response s'affiche correctement avec success = 1 et le reste aussi
} 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');
}
}
}
Georges
Commentaire