web-dev-qa-db-fra.com

com_ajax et JFactory :: getUser ()

J'utilise com_ajax pour les demandes et j'ai rencontré un problème.

J'essaie de déterminer si l'utilisateur qui fait une demande AJAX est connecté. Lorsque j'appelle JFactory :: getUser (), il renvoie un utilisateur invité, ID = 0. De même, JApplication-> isAdmin () renvoie false. J'imagine que c'est parce que com_ajax réside dans le site, pas dans le site de l'administrateur.

Est-il possible d'utiliser com_ajax et de distinguer si une personne est authentifiée? Sinon, y a-t-il un équivalent à com_ajax du côté de l’administrateur? Dois-je écrire mon propre Ajax sur un composant administratif?

2
George Sexton

En supposant que vous utilisiez les conventions de dénomination correctes pour votre tâche Ajax dans l'URL et la fonction PHP, vous devriez avoir quelque chose comme ceci:

helper.php

public static function myFunctionAjax()
{

}

fichier Javascript

var request = {
    'option' : 'com_ajax',
    'module' : 'mymodule',
    'method' : 'myFunction',
    'format' : 'raw'
};

$.ajax({
    type: 'POST',
    data: request,
    success: function(response) {
        // etc
    }
});

myFunction doit utiliser le même nom que la fonction PHP que vous souhaitez exécuter (myFunctionAjax()).).

Le seul être différent est que PHP la fonction nécessite Ajax à la fin.

Ensuite, dans votre fonction PHP, vous pouvez vérifier si l'utilisateur est connecté, comme suit:

public static function myFunctionAjax()
{
    $user = JFactory::getUser();

    if (!$user->guest)
    {
        // perform some magic
    }
    else
    {
        // Sorry, you must be logged in
    }
}
2
Lodder