J'essaie de créer une fonction de connexion très basique avec mon composant, mais je reçois toujours une réponse TRUE de la part de l'auth, que j'utilise des informations d'identification valides ou non. Les docs semblent indiquer que cela ne reviendrait vrai qu'en cas de succès. Voici la tâche du contrôleur que j'utilise, ainsi que la documentation pour la méthode de connexion.
/**
* Login authentication function.
*
* Username and encoded password are passed the onUserLogin event which
* is responsible for the user validation. A successful validation updates
* the current session record with the user's details.
*
* Username and encoded password are sent as credentials (along with other
* possibilities) to each observer (authentication plugin) for user
* validation. Successful validation will update the current session with
* the user details.
*
* @param array $credentials Array('username' => string, 'password' => string)
* @param array $options Array('remember' => boolean)
*
* @return boolean True on success.
*
* @since 3.2
*/
public function cartlogin() {
$app = JFactory::getApplication();
$username = $app->input->get('username', '', 'STRING');
$password = $app->input->get('password', '', 'STRING');
$result = $app->login(array('username' => $username, 'password' => $password));
if ($result == TRUE) {
$app->enqueueMessage(JText::_('COM_CUSTOM_LOGIN_SUCCESS'), 'message');
$this->setRedirect(JRoute::_('index.php?option=com_custom&view=cart', false));
} else {
$app->enqueueMessage(JText::_('COM_CUSTOM_LOGIN_FAILED'), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_custom&view=cart', false));
}
}
EDIT
Voici le formulaire de connexion. Et avant que vous ne le disiez, je sais que je n’ai pas encore intégré la fonction "se souvenir de moi". Mais cela n'a rien à voir avec l'authentification réelle.
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
?>
<div class=" col-lg-6 col-md-6 col-sm-6 col-xs-6">
<h2><span>Sign in to place your order!</span></h2>
<form id="login-form" method="post" action="<?php echo JROUTE::_('index.php') ?>">
<fieldset class="userdata">
<div class="form-group" id="form-login-username">
<div class="input-group">
<span class="input-group-addon">
<i title="Username" class="fa fa-user tip"></i>
</span>
<input type="text" placeholder="Username" size="18" tabindex="0" class="input form-control" name="username">
</div>
</div>
<div class="form-group" id="form-login-password">
<div class="input-group">
<span class="input-group-addon">
<i title="Password" class="fa fa-lock tip"></i>
</span>
<input type="password" placeholder="Password" size="18" tabindex="0" class="input form-control" name="password">
</div>
</div>
<div class="form-group" id="form-login-remember">
<div class="checkbox">
<label for="modlgn-remember">
<input type="checkbox" value="yes" class="input" name="remember"> Remember Me</label>
</div>
</div>
<div class="control-group">
<input type="submit" value="Log in" class="btn btn-primary" name="Submit">
</div>
<ul class="unstyled">
<li>
<a href="<?php echo JROUTE::_('index.php?option=com_users&view=registration'); ?>">
Create an account <span class="fa fa-arrow-right"></span></a>
</li>
<li>
<a href="<?php echo JROUTE::_('index.php?option=com_users&view=remind'); ?>">
Forgot your username?</a>
</li>
<li>
<a href="<?php echo JROUTE::_('index.php?option=com_users&view=reset'); ?>">Forgot your password?</a>
</li>
</ul>
<input type="hidden" value="com_custom" name="option">
<input type="hidden" value="cartlogin" name="task">
<?php echo JHtml::_( 'form.token' ); ?>
</fieldset>
</form>
</div>
EDIT (2) Je suppose que je pourrais faire quelque chose comme ceci, mais il ne semble pas que cela devrait être la meilleure pratique:
public function cartlogin() {
$app = JFactory::getApplication();
$username = $app->input->get('username', '', 'STRING');
$password = $app->input->get('password', '', 'STRING');
$remember = $app->input->get('remember', '', 'BOOLEAN');
$credentials = array(
'username' => $username,
'password' => $password
);
$option = array(
'remember' => $remember
);
$result = $app->login($credentials,$option);
if ($result) {
$user = JFactory::getUser();
if ($user->id != 0) {
$app->enqueueMessage(JText::_('COM_CUSTOM_LOGIN_SUCCESS'), 'message');
$this->setRedirect(JRoute::_('index.php?option=com_custom&view=cart', false));
} else {
$app->enqueueMessage(JText::_('COM_CUSTOM_LOGIN_FAILED'), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_custom&view=cart', false));
}
}
}
Ce n'est pas grave, cela fonctionne correctement ... J'ai un problème différent. J'ai un plugin d'authentification personnalisé installé, et si je le désactive, la connexion fonctionne correctement. Je vais devoir comprendre ce qui ne va pas avec le plugin.