Question

J'ai une classe appelée utilisateur avec la fonction statique loginRequired (), qui retourne false si l'utilisateur est connecté et true si l'utilisateur est déconnecté. Il ajoute également une erreur à une classe d'erreur que j'ai créé la personne qui raconte l'utilisation du site qu'ils doivent être connecté pour afficher le contenu.

L'idée est que, pour la partie supérieure de chaque fonction qui l'utilisateur doit être connecté, nous écrivons ce code:

if(User::loginRequired()) return;

Ce qui va afficher l'erreur et revenir immédiatement de la fonction. Je préférerais cela, cependant:

User::loginRequired();

Et le retour de la fonction d'appel à l'intérieur de la fonction loginRequired ... mais parce que loginRequired () est dans une classe séparée dans un fichier séparé, cela ne fonctionnera pas. Est-il possible de revenir de la fonction qui appelle loginRequired (), dans loginRequired ()?

Merci.

Était-ce utile?

La solution

La façon dont je l'ai vu un certain nombre d'applications open source gérer cela est en ayant une fonction require_login() qui effectue une redirection si l'utilisateur ne soit pas connecté.

Autres conseils

Je ne suis pas sûr que vous pouvez faire exactement ce que vous voulez, mais vous pouvez regarder à utiliser . Cela vous permettra de lancer une exception dans la fonction utilisateur :: loginRequired et attrapez à un niveau plus élevé. Vous pouvez aussi regarder à l'aide de la exit () fonction PHP.

Le contenu dans la page réelle dynamique? Ce que je veux dire est, dois-je authentifier juste pour voir autre chose que la page de connexion, ou que je vois des choses quand je suis connecté et d'autres choses quand je ne suis pas, etc? Parce que si l'ensemble du répertoire / section du serveur se trouve derrière un écran de connexion, vous pouvez simplement ajouter quelque chose au fichier .htaccess du répertoire qui redirige toute personne non connecté, etc.

Par contre, vous pouvez avoir ce fichier contenant l'état de connexion inclus dans quelle page / script que l'utilisateur visualise, avec le fichier inclus retourner simplement l'état de connexion au lieu de tout son contenu. Ceci est couvert par comprend dans l'exemple 5, "include () et la déclaration de retour ()". Si vous avez fait cela, vous pouvez utiliser une condition ternaire comme:

$logged_in = (include('userlogin.php') == TRUE) ? TRUE : FALSE;

Et puis dans chaque fonction protégée quelque chose comme:

global $logged_in;

Vous êtes toujours coincé avec une clause IF enveloppant la totalité de la fonction, mais au moins vous avez le statut de connexion. Si vous vouliez vous débarrasser de la FI à l'intérieur de la fonction, vous pouvez toujours faire appel à la fonction conditionnelle. Comme:

$content = ($logged_in == TRUE) ? some_function() : redirect_User();

Et puis, je viens de commencer à apprendre ce genre de choses il y a 2 mois et ne comprennent toujours pas les classes et les objets, donc je pourrais être tout à fait farfelu.

OT: J'envisagerait de modifier le nom de la méthode à isLoggedIn () si votre but décrit est le seul. Une méthode appelée loginRequired () serait mieux protéger le contenu confidentiel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top