2016-03-31 12 views
1

auf meiner Webseite gibt es 3 Optionen verfügbar, Anmelden, Registrieren und Abmelden.Laravel Auth :: check() precheck

Wenn ich nur die verfügbaren Schaltflächen z. Wenn der Benutzer angemeldet ist, möchte ich nur die Abmelde-Schaltfläche anzeigen, aber wenn der Benutzer ein Gast ist, benötigt er die Anmelde- und Registrierungs-Schaltflächen.

Jetzt habe ich einen Provider hinzugefügt, um zu überprüfen, ob der Benutzer authentifiziert ist. Hier ist mein Code.

<?php 

namespace App\Providers; 

use View; 
use Auth; 
use Illuminate\Support\ServiceProvider; 

class ShareServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     echo "Provider boot check "; 
     var_dump(Auth::check());   

     if(Auth::check()) 
     { 
      View::share(['loged_in' => true]); 
     } 
     else 
     { 
      View::share(['loged_in' => false]);   
     } 
    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 

Aber der Benutzer wird jedes Mal als Gast angezeigt. Wenn ich die Auth :: Check() in anderen Controllern mache, funktioniert alles gut. Aber ich möchte es nicht in jedem Controller überprüfen.

Antwort

0

Ich kann Ihnen eine Alternative anbieten, um eine Lösung für Ihr Problem zu finden, die innerhalb Ihrer Grenzen funktioniert.

Anstatt es als Dienstanbieter zu verwenden, können Sie es als Hilfsfunktion verwenden, die Sie in Ihren Blades oder Controllern aufrufen können.

Erstellen Sie eine helpers.php Datei und legen Sie sie als solche app/Http/helpers.php.

hinzufügen Danach es in Ihrem composer.json innerhalb des autoload Array

"autoload": { 
     "files": [ 
      "app/Http/helpers.php" 
     ], 

composer dump-autoload, danach in Ihrem Terminal.

nun in Ihrer helpers.php Datei fügen Sie die folgende Methode:

function userLoggedIn(){ 
    $logged_in = false; 
    if(Auth::check()){ 
     $logged_in = true; 
    } 
    return $logged_in; 
} 

Nun sollten Sie in der Lage sein, diese Methode in jedem Controller/Klinge zu verwenden.

@if(userLoggedIn()) 
    <p>Logged in</p> 
@else 
    <p>Not Logged in</p> 
@endif 

Auf diese Weise haben Sie nicht den Aufwand zu tragen von einer Auth durchführen zu müssen: in jedem Controller überprüfen und Sie können es immer noch überall verwenden Sie es in Ihrem Projekt benötigen.

Ressourcen: https://laracasts.com/discuss/channels/general-discussion/best-practices-for-custom-helpers-on-laravel-5?page=1