Laravel 5: Authentification HTTP Apache

J’ai besoin d’aide et de conseils sur le sujet suivant.

Mon boos a une configuration simple du serveur Apache et possède également une simple configuration d’ authentification PHP . Dès que l’utilisateur est validé à l’aide d’un panneau comme celui-ci.

entrer la description de l'image ici

Il / elle a access à toutes les applications en cours d’exécution. Donc, en d’autres termes, ce panneau sert de “porte”, si vous êtes sur la porte, vous avez access (bien sûr, il y a une table d’autorisation sur le serveur Web).

Problème

L’application que je construis en utilisant Laravel 5 doit s’exécuter derrière la porte, ce qui signifie que l’application doit savoir qui est l’utilisateur.

Utiliser $_SERVER['PHP_AUTH_USER']; Je peux récupérer le username dont vous username actuellement connecté.

Mais que faire si je veux suivre les actions de l’ user's sur mon application? J’ai besoin de quelque chose comme $this->user_id n’est-ce pas?

Donc, je pensais dès que l’utilisateur passait la «porte», je récupère son username et crée un utilisateur en le sauvegardant dans ma firebase database en cours d’exécution derrière Laravel.

  if(isset($_SERVER)) { if ( array_key_exists( 'PHP_AUTH_USER', $_SERVER ) ) { $agent = $_SERVER['PHP_AUTH_USER']; //Request::server('PHP_AUTH_USER') } $user = User::create([ 'username' => $agent, ]); } 

Mais cela rend l’utilisateur chaque fois que l’utilisateur rafraîchit la page! Mais sans aller plus loin, quelle est la meilleure façon de le faire?

  1. AppServiceProvider -je besoin d’un fournisseur distinct (j’ai testé le code ci-dessus dans AppServiceProvider )?

  2. Comment puis-je faire quelque chose comme ceci $this->user_id après avoir enregistré le username ?

Note : je sais que Laravel dispose d’une autorisation de base, mais cela ne fonctionnera pas car l’utilisateur n’est pas encore dans ma firebase database. Je dois d’abord les créer comme ci-dessus.

Tout d’abord, vous devriez vérifier si un utilisateur avec le nom d’utilisateur fourni existe déjà dans votre firebase database. De cette façon, vous ne créez pas un nouvel utilisateur à chaque actualisation. Vous pouvez ensuite utiliser Auth::login($user); pour vous connecter à l’utilisateur qui vous permet d’utiliser le middleware d’ auth fourni par Laravel (pas auth.basic !). De cette façon, vous pouvez accéder à l’utilisateur sur toute votre application avec la façade Auth et stocker des informations supplémentaires sur l’utilisateur:

 if(isset($_SERVER)) { if ( array_key_exists( 'PHP_AUTH_USER', $_SERVER ) ) { $agent = $_SERVER['PHP_AUTH_USER']; //Request::server('PHP_AUTH_USER') // Try to find an existing user, or create a new one if the user does not exist $user = User::firstOrCreate([ 'username' => $agent, ]); // Authenticate the user \Auth::loginUsingId($user->id); } } 

Je sais que ce n’est pas ce que vous voulez entendre, mais j’utiliserais vraiment l’authentification de Laravel. Apache basic auth doit empêcher les utilisateurs non autorisés d’accéder à votre page et peut-être empêcher que la bombe ne soit explorée par les robots, et ne pas servir de formulaire de connexion à votre application.

Créez un ensemble d’informations d’identification pour l’authentification Apache, afin que tous les utilisateurs puissent accéder à la page. Mais ensuite, créez un formulaire de connexion standard avec nom d’utilisateur et mot de passe, qui sera spécifique à chaque utilisateur. De cette façon, même si quelqu’un parvient à passer à travers Apache, ils ne seront toujours pas connectés.

Sur le plan de la sécurité, ce serait la voie à suivre. De cette manière, vous ouvrez de nouvelles possibilités: vous pouvez stocker plus d’informations sur vos utilisateurs, comme leur langue préférée ou la scope de leurs permissions.

Penses-y 🙂