web-dev-qa-db-fra.com

Évitez de vous connecter sur onUserAuthenticate

J'essaie de supprimer le login si mon $completed Var est faux. Je peux le faire fonctionner avec die() mais je ne sais pas comment le faire correctement, de sorte que l'utilisateur soit renvoyé à la page de connexion avec un message d'erreur.

J'ai essayé avec return NULL;, return false; Et juste return;

Je ne peux pas le faire fonctionner ou trouver la solution n'importe où. J'espère vraiment que vous pourrez m'aider.

Ceci est mon code:

defined('_JEXEC') or die;

class plgAuthenticationTestlogin extends JPlugin{
    function onUserAuthenticate( $credentials, $options, &$response ){
        $captcha_plugin = JFactory::getConfig()->get('captcha');
        $captcha = JCaptcha::getInstance($captcha_plugin);
        $completed = $captcha->CheckAnswer('captcha');
        if(!$completed){
            $response->status = JAuthentication::STATUS_FAILURE;
            $response->error_message = 'captcha not correct';
            die("not valid reCaptcha");
        }
    }
}

Il est placé à l'intérieur d'un plugin créé. placé dans le dossier: plugins> authentication> mypluginFolder> myplugin.php Ce plugin fonctionne correctement, comme décrit ci-dessus - La connexion est annulée si j'utilise die("not valid reCaptcha");

1
JonasB

On dirait que ça marche comme ça. Mais est-ce la bonne approche?

if(!$completed){
    $app = JFactory::getApplication();
    $app->enqueueMessage('ReCaptcha not validated', 'Fail');
    $app->redirect(JRoute::_('index.php'));
    die();
}

Je sens que c'est faux et que je devrais utiliser JAuthentication::STATUS_FAILURE;

0
JonasB

Ce n'est pas une bonne façon de faire car vous ne devriez pas utiliser 'die'

Pour ce faire, utilisez cette méthode dans le plug-in Authentication.

function onUserAuthenticate($credentials, $options, &$response)
{
    // check your condition and stop login here
    $response->status        = JAuthentication::STATUS_FAILURE;
    $response->type          = 'Test';
    $response->error_message = JText::sprintf('JGLOBAL_AUTH_FAILED', JText::_('NOT_LOGGED_IN'));
    return false;
}

Vous ne pouvez pas définir la redirection ici, pour définir la redirection, assurez-vous de la définir dans le paramètre (variable in JInput)

Si la méthode n'est pas déclenchée, veillez à définir l'ordre dans le bon ordre.

1
Pratyush