So schützen Sie image aus Sicht der öffentlichkeit in Laravel 5?
Habe ich installiert Laravel 5.0 und Authentifizierung. Alles funktioniert einwandfrei.
Meine web-Seite ist nur für angemeldete Mitglieder. Der Inhalt ist geschützt, um Authentifizierte Mitglieder nur, aber die Bilder innerhalb der Website ist nicht geschützt für die öffentlichkeit.
Jedem schreibt man die Bild-URL direkt sehen kann das Bild, auch wenn die person ist nicht im system angemeldet sind.
http://www.somedomainname.net/images/users/userImage.jpg
Meine Frage: ist es möglich, Bilder schützen (die obige URL-Beispiel) aus Sicht der öffentlichkeit, in anderen Worten, wenn eine URL von dem Bild senden an eine person, die Person muss Mitglied sein und sich einloggen zu können, siehe Bild.
Ist das möglich und wie?
- Sie haben versucht, die Einrichtung einer route zu schützen, den image-Pfad?
- Nein, aber ich werde versuchen, die Folgen zu beantworten und lassen Sie wissen,
- es das Beispiel unten für mich gearbeitet. Du hast Recht es ist in route.
- Froh maytham ist soltion für Sie gearbeitet =]
- pls, don ' T verwenden Sie "xxx" ein Exempel für eine URL. Es ist einfach falsch! 🙁
- Ich war nur ein Scherz...
- 😉 Ich hab deinen Punkt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es möglich, Bilder schützen aus öffentlichkeit in Laravel 5.x-Ordner.
Erstellen
images
Ordner unterstorage
Ordner (, die ich gewählt habestorage
- Ordner, da Sie schreiben, hat die Erlaubnis schon, dass ich kann verwenden, wenn ich Bilder hochladen um es) in Laravel wiestorage/app/images
.Verschieben Sie die Bilder, die Sie schützen möchten, aus öffentlichen Ordner auf den neuen erstellt
images
Ordner. Man könnte auch entschieden andere Position zu erstellenimages
Ordner, aber nicht in öffentlichen Ordner, aber mit Laravel Ordner-Struktur, aber immer noch eine logische Position Beispiel nicht im controller-Ordner. Als Nächstes müssen Sie eine route erstellen und image-controller.Route Erstellen
Die route leitet alle Bild-Anfrage Zugang zu den Authentifizierung-Seite, wenn die person nicht eingeloggt ist.
Erstellen ImagesController
Können Sie ändern Ihre Speicher-Pfad-und Datei - /Ordner-Struktur, wie Sie möchten, entsprechend Ihrer Anforderung, dies ist nur um zu zeigen wie ich es gemacht habe und wie es funktioniert.
Können Sie auch Hinzugefügt Zustand zeigen die Bilder nur für bestimmte Mitglieder in der Steuerung.
Es ist auch möglich, den hash der Datei-Namen mit Datei-name, Zeitstempel und andere Variablen zusätzlich.
Zusatz: einige gefragt, ob diese Methode kann verwendet werden, als alternative zu den public-Ordner hochladen, JA, es ist möglich, aber es wird nicht empfohlen, wie in diesem Antwort. Also die gleiche Methode kann auch verwendet werden, um hochladen von Bildern im Speicher-Pfad, auch wenn Sie nicht beabsichtigen, Sie zu schützen, Folgen Sie einfach den gleichen Prozess, aber entfernen
'middleware' => 'auth',
. So dass Sie nicht die 777-Berechtigung in Ihrem öffentlichen Ordner und haben immer noch eine sichere Upload-Umgebung. Das gleiche erwähnt Antwort auch erklären, wie man diese Methode mit out-Authentifizierung bei einigen würde man es verwenden, oder geben alternative Lösung.Image::make
obige Methode ist aus der intervention/Bild Paket?Habe ich nicht wirklich ausprobiert, aber ich fand Nginx
auth_request
- Modul, das Ihnen erlaubt, zu überprüfen, die Authentifizierung von Laravel, aber immer noch senden Sie die Datei über Nginx.Sendet es eine interne Anfrage zu diesem url und überprüft den http-code für Erfolg (2xx) oder Fehler (4xx) und bei Erfolg, kann der Benutzer die Datei herunterladen.
Edit: eine Weitere option ist das etwas, was ich schon versucht und es schien zu funktionieren. Sie können
X-Accel-Redirect
-header, um die Datei von Nginx. Der Antrag geht über PHP, aber anstatt die ganze Datei durch, es sendet lediglich den Speicherort der Datei Nginx, die dann wiederum an den client.In einem früheren Projekt habe ich geschützt, uploads, indem Sie Folgendes tun:
Erstellt Speicher Festplatte:
Dies wird mit dem hochladen der Dateien auf
\storage\app\uploads\
die nicht zur Verfügung öffentlichen anzeigen.Speichern von Dateien auf Ihrem controller:
Damit die Benutzer, um die Dateien anzuzeigen und zu schützen, die uploads von unbefugte Zugang. Prüfen Sie zuerst, ob die Datei existieren auf der Festplatte:
Dienen die Datei, wenn der Benutzer das Recht haben, Zugang:
Schließlich auf Web.php Routen: