2015-12-14 13 views
5

Ich brauche Hilfe und Beratung zu dem folgenden Thema.Laravel 5: Apache PHP http Authentifizierung

Meine Boos hat eine einfache Apache-Server-Setup und hat auch a simple php auth Setup. Sobald der Benutzer mit einem solchen Panel validiert wurde.

enter image description here

Er/sie als Zugang zu allen Anwendungen dahinter läuft. Mit anderen Worten, dieses Panel dient als "Tor", wenn Sie sich über dem Tor befinden, haben Sie Zugriff (natürlich gibt es eine Berechtigungstabelle, die auf dem Webserver läuft).

Problem

Die App Ich baue mit Laravel 5 hinter dem Tor ausgeführt werden muss, so dass es bedeutet, dass der App, die die Benutzer wissen muss.

$_SERVER['PHP_AUTH_USER']; Verwendung Ich kann die username dessen Abruf zur Zeit angemeldet.

Aber was, wenn ich will die user's Aktionen auf meiner App verfolgen? Ich brauche so etwas wie $this->user_id oder?

Also dachte ich, sobald der Benutzer das "Tor" passiert Ich hole seine username und erstellen Sie einen Benutzer aus dem Speichern in meiner Datenbank läuft hinter Laravel, indem Sie dies tun.

Aber das macht Benutzer jedes Mal, wenn der Benutzer die Seite aktualisiert! Aber ohne weiter zu gehen, was ist der beste Weg, dies zu tun?

  1. Brauche ich einen separaten Provider (I über den Code getestet in AppServiceProvider)?

  2. Wie kann ich so etwas tun $this->user_id nach dem Speichern der username?

Hinweis: Ich weiß Laravel Grund Auth aus der Box, aber das wird nicht funktionieren, weil der Benutzer noch nicht in der Datenbank ist. Ich muss sie zuerst wie oben erstellen.

+0

Wie viele Benutzer haben Zugriff auf die Seite? Ist es für jede Zielgruppe öffentlich verfügbar oder handelt es sich um eine interne Seite, die von N festen Benutzern verwendet wird? – lesssugar

+0

@lesssugar Benutzer innerhalb der Firma haben alle Zugriffe (natürlich, nachdem Sie die Anmeldung bestanden). Es ist nicht öffentlich zugänglich aus dem Internet (wenn das was du meinst) – user3641381

Antwort

1

Zunächst sollten Sie überprüfen, ob ein Benutzer mit dem angegebenen Benutzernamen bereits in der Datenbank vorhanden ist.Auf diese Weise erstellen Sie bei jeder Aktualisierung keinen neuen Benutzer. Sie können dann Auth::login($user); verwenden, um sich beim Benutzer anzumelden, damit Sie die von Laravel bereitgestellte auth Middleware (nicht auth.basic!) Verwenden können. Auf diese Weise können Sie auf den Benutzer über Ihre gesamte App mit der Auth Fassade zugreifen und zusätzliche Informationen über den Benutzer speichern:

+0

Würden Sie den oben genannten Code in einem anderen Anbieter (um nur einmal ausgelöst zu bekommen) empfehlen oder einfach in "AppServiceProvider" behalten? Weil ich jedes Mal, wenn ich eine bestimmte Befehlszeile ausführe, ErrorException 'undefined variable: agent' bekomme. – user3641381

+0

Sie sollten den Login-Code innerhalb Ihrer zweiten if-Anweisung platzieren. Ich habe meine Antwort entsprechend aktualisiert. Artisan sollte nicht mehr versagen. Sie können es in den AppServiceProvider einfügen. Ich würde den obigen Code in einen dedizierten Dienstanbieter verschieben, wenn die Anwendung größer wird. Letztendlich empfehle ich, einen eigenen benutzerdefinierten Auth-Provider zu implementieren: http://laravel.com/docs/5.1/authentication#adding-custom-authentication-drivers – tommy

+0

Ich habe das getestet. Es erstellt nur einen Benutzer! Wenn ich mich also anmelde, erstelle ich einen Benutzer von mir (mit dem Benutzernamen login), aber wenn jemand anderes im Unternehmen versucht, die URL zu erreichen (ich meine mich anzumelden), dann erzeugt das keinen Benutzer aus ihm heraus . Irgendwelche Ideen? – user3641381

1

Ich weiß, dass es nicht das ist, was Sie hören möchten, aber ich würde Laravels Authentifizierung wirklich einsetzen. Apache basic auth sollte verhindern, dass nicht autorisierte Benutzer auf Ihre Seite zugreifen und möglicherweise verhindern, dass die Seite von Bots gecrawlt wird - nicht als Anmeldeformular für Ihre App dienen.

Erstellen Sie eine Reihe von Anmeldeinformationen für Apache-Authentifizierung, damit alle Personen, die diese Berechtigung haben, auf die Seite zugreifen können. Erstellen Sie dann ein Standard-Login-Formular mit Benutzername und Passwort, das für jeden Benutzer spezifisch ist. Auf diese Weise schafft es sogar jemand, über Apache zu kommen, sie sind immer noch nicht eingeloggt.

Sicherheitstechnisch wäre dies der richtige Weg. Auf diese Weise öffnen Sie auch neue Möglichkeiten: Sie können mehr Informationen über Ihre Benutzer speichern, z. B. ihre bevorzugte Sprache oder ihren Berechtigungsumfang.

Denk darüber nach :)

+0

Danke, dass du dir Zeit genommen hast und meine Frage beantwortet hast. Ja, ich habe Ihre Frage geprüft, bevor Sie die Frage stellen. Aber ich brauche eine Weg-zu-gehen-Lösung und später werde ich sie in meinen separaten Anbieter erweitern. – user3641381