Savoir si l'utilisateur est authentifié (cas particulier)

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Je vous explique mon problème...
Je dispose d'un site sous drupal (6.x) ou des utilisateurs peuvent s'enregister afin d'accéder a plus de contenu. (adresse du type http://nomdedomaine.com)

Je dispose aussi d'un script tiers a l'adresse http://nomdedomaine.com/monscript/index.php.

Ces 2 elements sont sur le meme serveur (en gros j'ai créé un dossier dans mon repertoire drupal et j'y ai copié mon script tiers)

Un lien sur mon site drupal pointe vers l'adresse de mon script.

Et j'aimerais pouvoir récuperer les valeurs de la variable $GLOBALS['user'] de drupal sur la page d'index de mon script afin de pouvoir checker si l'utilisateur est authentifié.

Je n'y arrive malheureusement pas.

Une idée ?

Merci d'avance.

Jacques.

Forum : 
Version de Drupal : 

Je ne sais pas comment réaliser cela mais peut être :
- inclure ton script carrément dans un noeud de drupal au format php; ou dans un template.
- inclure ton script externe de manières à ce qu'il s'exécute dans une page de drupal en l'incluant dans un module (c'est à dire créer des fichiers pour le module et faire en sorte que ton script utilise une fonction qui retourne le résultat à drupal)
- inclure les fonctions de drupal dans ton script externe; peut etre avec les histoire de bootstrap? (je crois que c'est létape qui permet de lancer tout le framework de drupal mais je ne suis pas sur)

J'ai essayé d'inclure bootstrap dans ma page sans succes (je vais essayer de nouveau).

Sinon je pensais aux sessions etant donné que mon site et mon script sont sur le meme serveur... Mais j'y ai passé une partie de l'apres midi sans succes...

Ce sont les seules pistes que j'ai pour le moment (créer un module serai un peu compliqué pour mon cas, je pense).

Merci pour ta reponse, si quelqu'un peut apporter d'autres idées ou meme la solution, je le remercie tout autant que toi !

merci.

peut être que si tu donnes un peu plus d'info sur
- ce que fait ton script
- est ce que tu as besoin d'autres variables en provenance de drupal pour le faire fonctionner à part l'objet $user?
- est ce que tu peux lui passer une variable via un lien ou par post?

Ok donc pour les specifications...

J'ai un script perso qui me permet de voir des statistiques en live. Tout est deja codé, c'est assez lourd avec pas mal de fonctions...

A coté de ca, j'ai mon site sous drupal avec mes pages statiques, mes news, mes petits plugins...

Je souhaite pouvoir donner l'acces a ce script a certains de mes utilisateurs enregistré dans ma bdd drupal.

Pour cela, j'ai créé un role dans drupal : "autorisé a utiliser le script".

En trifouillant dans drupal, je me suis rendu compte que la variable $GLOBALS['user'] contient toutes les infos dont j'ai besoin a savoir : $GLOBALS['user']->uid (pour faire la liaison entre la bdd de mon script et celle de drupal), $GLOBALS['user']->roles (pour verifier que l'utilisateur appartient bien a mon role "autorisé a utiliser le script").

$GLOBALS['user'] est definit pour des utilisateurs authentifié. J'aimerais donc me baser sur les données de cette variable dans le "process" d'authentification de mon script de statistiques...

En gros sur http://www.mondomain.com/mon-script/index.php, il y aura un morceau de code du type :

<?php
 
$possedeLeRole
= false//bool pour savoir si l'utilisateur possede le role
foreach($GLOBALS['user']->role as $role) { //car role est un array avec tous les roles de l'utilisateur courant
if($role == "autorisé a utiliser le script") { $possedeLeRole = true; }
}
//fin du foreach

if($possedeLeRole == true) {   //si l'utilisateur courant possede le role
//j'affiche les statistiques de mon utilisateurs
maMethodeDaffichage($GLOBALS['user']->uid);  //dans mon script, je m'arrangerai pour que les id correspondent...
}
else {
//lien vers la page de login drupal
//petit blabla expliquant comment obtenir le role, et promotion de mon script
}
?>

Voici ce que fait mon script (en gros) et pourquoi il a besoin de cette variable (et uniquement cette variable).

Parcontre, je ne peux pas passer cette info par un post ou un lien car en gros, j'utilise l'authentification de drupal pour autoriser (ou restreindre) l'utilisation de mon script.

C'est pour cela que je parlais de session ect...

Le soucis c'est que lorsque je definit une session sur la page d'accueil de drupal, elle n'est plus disponible sur la page de mon script (alors que j'utilise un lien de mon site drupal vers le dossier ou ce trouve mon script)

J'espere avoir été clair, merci pour votre/ton aide.

A priori, je ssui assez d'accord avec nyl auster quand il te propose d'appeler ton script depuis une page Drupal. Ça me paraît être la façon la plus sûr - et la plus secure - de procéder.

Pourquoi ne pas inclure ton script dans un petit module ?

"Parcontre, je ne peux pas passer cette info par un post ou un lien car en gros, j'utilise l'authentification de drupal pour autoriser (ou restreindre) l'utilisation de mon script"

C'est un peu difficile de répondre sans vision d'ensemble mais qu'est ce qui t'empeche de mettre ton script directement dans une page drupal? Soit à l'arrache (dans le body d'un noeud avec une include par exemple); soit plus proprement en créant à la rigueur un type de contenu spécifique et un template qui sert à afficher ce type de contenu : ainsi tu peux te débarasser d'absolument tout le côté html du theme qui te gène peut être.

tu prends peut être le probleme à l'envers en fait (peut être hein, je peux pas l'affirmer avec les éléments dont je dispose).

Sinon La méthode la plus propre consisterait sans aucun doute à coder un module mais si tu n'as pas un pratiquer la création de module jusqu'ici c'est pas un bon départ pour apprendre je pense... mais j'ai un peu de mal à voir qu'est ce qui empecherait d'inclure ton script directement dans une page drupal?

Merci pour vos reponses.

En effet, je me suis penché sur la creation de page drupal et ca m'a l'air de fonctionner.

Dans ces pages (drupal) j'ai acces a $GLOBAL donc je peux checker si mon utilisateur possede le role (et lui afficher en consequence soit les stats, soit un blabla pour qu'il demande le role)

Et je vais mettre mes includes dans ces differentes pages drupal.

Mon probleme (avec cette solution) etait : Comment trimballer mes objets (c-a-d mes instances de classe) entre une page drupal 1 et une page drupal 2.

En passant par la session, ca marche :

Drupal page 1:

<?php
include('./myscript/class/class1.php');
$var = new class1('something1', 1, 2, 3);
$_SESSION['custom1'] = serialize($var);   //need to check if the session already exist...
?>

Drupal page 2

<?php
include('./myscript/class/class1.php');
$var = unserialize($_SESSION['custom1']);   //need to check if the session already exist...
echo $var->do_Something();      //its the same as the class object on the Drupal page1
?>

L'objet est le meme entre mes 2 pages Drupal. Crade mais ca marche !

En tous cas merci pour votre aide, je n'aurais pas regardé cette solution sans vos interventions.