Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Laravel auth und session problem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Laravel auth und session problem

    Tach zusammen,

    ich habe bei meiner Webapplikation nun feststellen müssen, dass mein Router nicht so routet wie ich es konfiguriert habe.

    Eigentlich will ich nur eins erreichen, unzwar das, egal welche Seite geladen wird, immer geprüft wird mittels Auth::check() ob der User eingeloggt ist. Wenn nicht, dann leite zu /user/login um.

    Nun habe ich heute gesehen, das, nachdem die Session abgelaufen war, nicht zur Loginform geroutet wurde. Stattdessen bekomme ich eine Exception das die Sessionvariable null ist. Dazu habe ich nun folgende Lösungen probiert.

    Als erstes habe ich eine Route konfiguriert.

    PHP-Code:
    Route::any('{all}', function() {
        if (!
    Auth::check())
            return 
    Redirect::to('/user/login');
        
    //den Code habe ich zum testen nachträglich hinzugefügt
        
    if (!Session::has('permissions') || !Session::has('grouppermissions'))
            return 
    Redirect::to('/user/login');
    }); 
    leider ohne Erfolg. Ich kann, auch wenn ich mich auslogge, immer noch auf die Website zugreifen. Dazu brauche ich nur die URLs oben eingeben und lande zB in der Gruppenverwaltung.

    Dann habe ich gedacht, probierst du es einfach mal in dem du im BaseController den Konstruktor anpasst.

    PHP-Code:
    public function __construct() 
    {
        
    $this->checkLogin();
    }

    protected function 
    checkLogin()
    {
        if (!
    Auth::check())
            return 
    Redirect::to('/user/login');
        if (!
    Session::has('permissions') || !Session::has('grouppermissions'))
            return 
    Redirect::to('/user/login');

    Leider führt das auch nicht zum gewünschten Ergebnis. War auch schon so Paranoid das ich den Apache Server neugestartet habe.

    Kann mir vielleicht jemand erklären wieso ich mit diesen beiden Wegen nicht überprüfen kann ob der User eingeloggt ist?
    Oder kann es sein das der User nicht richtig ausgeloggt wurde?

    Logout mach ich so

    PHP-Code:
    Auth::logout();
    Session::flush(); 
    Bekomme außer der Null Exception sonst keine andere Exception.

  • #2
    http://www.php.de/php-einsteiger/543...produkten.html

    Ich bin mir nich sicher, ob das nich zu spezifisch für php.de ist

    Aber Laravel ist ja aktuell recht beliebt und wird sicher ein paar gute Laravelspezifische Foren mit Laravel-Experten geben

    LG
    https://github.com/Ma27
    Javascript Logic is funny:
    [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

    Kommentar


    • #3
      Zitat von Ma27 Beitrag anzeigen
      Aber Laravel ist ja aktuell recht beliebt und wird sicher ein paar gute Laravelspezifische Foren mit Laravel-Experten geben
      Wenn jemand eines kennt (laravel.io ist imo NICHT gut) mag er es mir bitte nennen. Gerne auch per PN.

      Kommentar


      • #4
        Zitat von Ma27 Beitrag anzeigen
        http://www.php.de/php-einsteiger/543...produkten.html

        Ich bin mir nich sicher, ob das nich zu spezifisch für php.de ist

        Aber Laravel ist ja aktuell recht beliebt und wird sicher ein paar gute Laravelspezifische Foren mit Laravel-Experten geben

        LG
        Wäre ja eigentlich mal eine Idee für ein Unterforum. Nicht speziell für einzelne sondern für alle PHP Frameworks .

        Hab das Problem übrigens lösen können. Ich hatte einen Rechtschreibfehler drin und das mit den Routen hab ich folgendermaßen gelöst.

        Ich habe zuerst ein Route Filter erstellt

        PHP-Code:
        Route::filter('auth', function()
        {
            if (!
        Auth::check())
                return 
        Redirect::to('/user/login');
        }); 
        und bin dann hingegangen und habe alle meine anderen Routen hier rein geknallt. Die Routen für die LoginForm und den LoginVorgang dürfen nicht hier rein. Sonst klappt der Login nicht

        PHP-Code:
        Route::group(array('before' => 'auth'), function()
        {
            
        //alle meine Routen außer für die Loginform und den Loginvorgang

        Kommentar


        • #5
          Dann ist dein Auth-Setup wohl nicht korrekt. Was natürlich komisch ist, ist dass Auth::check() dir immer true zurückzugeben scheint. Prüf das doch mal mit dd().

          Ansonsten finde ich beide deine Versuche, Routen zu schützen, nicht empfehlenswert. Im ersten Fall definierst du ne CatchAll-Route, sodass alle danach registierten Routen sinnfrei wären, was im ürigen den kompletten Router sinnlos und die Applikation unbrauchbar machte.

          Der Authentifizierungscheck im Controller geht zwar, würde ich aber auch nicht machen. Das gibt dem Controller nur zusätzliche Aufgaben und Abhängigkeiten (Eigentlich gibts ja nen Single Responsibility Prinzip, was beim Controller aber eh immer ein bisschen aufgeweicht ist - aber man muss ja nicht übertreiben.)

          Meine Meinung nach beste Möglichkeit sind Filter: http://laravel.com/docs/security#protecting-routes

          edit// zu langsam :P

          Kommentar


          • #6
            Zitat von alxy Beitrag anzeigen
            Dann ist dein Auth-Setup wohl nicht korrekt. Was natürlich komisch ist, ist dass Auth::check() dir immer true zurückzugeben scheint. Prüf das doch mal mit dd().

            Ansonsten finde ich beide deine Versuche, Routen zu schützen, nicht empfehlenswert. Im ersten Fall definierst du ne CatchAll-Route, sodass alle danach registierten Routen sinnfrei wären, was im ürigen den kompletten Router sinnlos und die Applikation unbrauchbar machte.

            Der Authentifizierungscheck im Controller geht zwar, würde ich aber auch nicht machen. Das gibt dem Controller nur zusätzliche Aufgaben und Abhängigkeiten (Eigentlich gibts ja nen Single Responsibility Prinzip, was beim Controller aber eh immer ein bisschen aufgeweicht ist - aber man muss ja nicht übertreiben.)

            Meine Meinung nach beste Möglichkeit sind Filter: http://laravel.com/docs/security#protecting-routes

            edit// zu langsam :P
            Jo habe mich mal ein wenig durchs Internet und durch die Doku gewühlt und bin fündig geworden

            Den ersten Fehler den ich aber gemacht hatte war recht lustig. Für den Logoutbutton im Template habe ich anstatt zu /user/logout nach /user/login geroutet. Hab mich schon gewundert warum meine Session nicht gekillt wurde. Im Prinzip habe ich mich nicht ausgeloggt sondern mich selbst nur zurück zur LoginForm geroutet

            Kommentar

            Lädt...
            X