2017-06-10 7 views
0

Ich habe erfolgreich einen Login-Benutzer mit Laravel 5.4 mit LoginController authentifiziert und haben einen Event-Listener, die lassen Ich weiß, dass ich das getan habe. In meinem Artikel versuche ich jedoch, Auth::guest() zu überprüfen, um die Ansicht eines angemeldeten Benutzers oder die Ansicht eines Gastbenutzers dynamisch anzuzeigen. Ich sehe jedoch immer die Ansicht eines Gastbenutzers.Ich habe erfolgreich einen Benutzer angemeldet, aber Auth :: check() und Auth :: user() scheinen nicht zu arbeiten

LoginController:

namespace App\Http\Controllers\Auth; 

use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\AuthenticatesUsers; 

class LoginController extends Controller 
{ 
    use AuthenticatesUsers; 

    protected $redirectTo = '/register'; 

    public function __construct() 
    { 
      $this->middleware('guest')->except('logout'); 
    } 

    public function username() 
    { 
     return 'username'; 
    } 
} 

Config/Auth:

<?php 

    return [ 


    'defaults' => [ 
     'guard' => 'web', 
     'passwords' => 'user', 
     ], 

     'guards' => [ 
     'web' => [ 
      'driver' => 'session', 
      'provider' => 'user', 
     ], 

     'api' => [ 
      'driver' => 'token', 
      'provider' => 'user', 
     ], 
     ], 

     'providers' => [ 
      'user' => [ 
       'driver' => 'eloquent', 
       'model' => App\User::class, 
      ], 
     ], 


     'passwords' => [ 
      'user' => [ 
       'provider' => 'user', 
       'table' => 'password_resets', 
       'expire' => 60, 
      ], 
     ], 
    ]; 

Routes/Web:

 Route::get('/test', '[email protected]'); 

     Auth::routes(); 

app.blade:

<!DOCTYPE html> 
<html lang="{{ app()->getLocale() }}"> 
<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 

    <!-- CSRF Token --> 
    <meta name="csrf-token" content="{{ csrf_token() }}"> 

    <title>{{ config('app.name', 'Laravel') }}</title> 

    <!-- Styles --> 
    <link href="{{ asset('assets/css/all.css') }}" rel="stylesheet"> 
</head> 
<body> 
    <div id="app"> 
     <nav class="navbar navbar-default navbar-static-top"> 
      <div class="container"> 
       <div class="navbar-header"> 

        <!-- Collapsed Hamburger --> 
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app-navbar-collapse"> 
         <span class="sr-only">Toggle Navigation</span> 
         <span class="icon-bar"></span> 
         <span class="icon-bar"></span> 
         <span class="icon-bar"></span> 
        </button> 

        <!-- Branding Image --> 
        <a class="navbar-brand" href="{{ url('/') }}"> 
         {{ config('app.name', 'Laravel') }} 
        </a> 
       </div> 

       <div class="collapse navbar-collapse" id="app-navbar-collapse"> 
        <!-- Left Side Of Navbar --> 
        <ul class="nav navbar-nav"> 
         &nbsp; 
        </ul> 

        <!-- Right Side Of Navbar --> 
        <ul class="nav navbar-nav navbar-right"> 
         <!-- Authentication Links --> 
         @if (!Auth::check()) 
          <li><a href="{{ route('login') }}">Login</a></li> 
          <li><a href="#">{{Auth::check()}}</a></li> 
          <li><a href="{{ route('register') }}">Register</a></li> 
         @else 
          <li class="dropdown"> 
           <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"> 
            {{ Auth::user() }} <span class="caret"></span> 
           </a> 

           <ul class="dropdown-menu" role="menu"> 
            <li> 
             <a href="{{ route('logout') }}" 
              onclick="event.preventDefault(); 
                document.getElementById('logout-form').submit();"> 
              Logout 
             </a> 

             <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;"> 
              {{ csrf_field() }} 
             </form> 
            </li> 
           </ul> 
          </li> 
         @endif 
        </ul> 
       </div> 
      </div> 
     </nav> 

     @yield('content') 
    </div> 

    <!-- Scripts --> 
    <script src="{{ asset('assets/js/app.js') }}"></script> 
</body> 
</html> 

RouteServiceProvider:

<?php 

namespace App\Providers; 

use Illuminate\Support\Facades\Route; 
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; 

class RouteServiceProvider extends ServiceProvider 
{ 
    /** 
    * This namespace is applied to your controller routes. 
    * 
    * In addition, it is set as the URL generator's root namespace. 
    * 
    * @var string 
    */ 
    protected $namespace = 'App\Http\Controllers'; 

    /** 
    * Define your route model bindings, pattern filters, etc. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     // 

     parent::boot(); 
    } 

    /** 
    * Define the routes for the application. 
    * 
    * @return void 
    */ 
    public function map() 
    { 
     $this->mapApiRoutes(); 

     $this->mapWebRoutes(); 

     // 
    } 

    /** 
    * Define the "web" routes for the application. 
    * 
    * These routes all receive session state, CSRF protection, etc. 
    * 
    * @return void 
    */ 
    protected function mapWebRoutes() 
    { 
     Route::group(array(
      'middleware' => ['web', 'auth'], 
      'namespace' => $this->namespace, 
     ), function ($router) { 
      require base_path('routes/web.php'); 
     }); 

    } 

    /** 
    * Define the "api" routes for the application. 
    * 
    * These routes are typically stateless. 
    * 
    * @return void 
    */ 
    protected function mapApiRoutes() 
    { 
     Route::prefix('api') 
      ->middleware('api') 
      ->namespace($this->namespace) 
      ->group(base_path('routes/api.php')); 
    } 
} 

Http\Kernal:

<?php 

namespace App\Http; 

use Illuminate\Foundation\Http\Kernel as HttpKernel; 

class Kernel extends HttpKernel 
{ 
    /** 
    * The application's global HTTP middleware stack. 
    * 
    * These middleware are run during every request to your application. 
    * 
    * @var array 
    */ 
    protected $middleware = [ 
     \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
     \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, 
     \App\Http\Middleware\TrimStrings::class, 
     \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, 
    ]; 

    /** 
    * The application's route middleware groups. 
    * 
    * @var array 
    */ 
    protected $middlewareGroups = [ 
     'web' => [ 
      \App\Http\Middleware\EncryptCookies::class, 
      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
      \Illuminate\Session\Middleware\StartSession::class, 
      \Illuminate\Session\Middleware\AuthenticateSession::class, 
      \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
      \App\Http\Middleware\VerifyCsrfToken::class, 
      \Illuminate\Routing\Middleware\SubstituteBindings::class, 
     ], 

     'api' => [ 
      'throttle:60,1', 
      'bindings', 
     ], 
    ]; 

    /** 
    * The application's route middleware. 
    * 
    * These middleware may be assigned to groups or used individually. 
    * 
    * @var array 
    */ 
    protected $routeMiddleware = [ 
     'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 
     'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
     'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 
     'can' => \Illuminate\Auth\Middleware\Authorize::class, 
     'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 
     'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 
    ]; 
} 
+0

Wenden Sie die Authentifizierungsmiddleware auf Ihre Routen an, für die eine Authentifizierung nach der Anmeldung erforderlich ist? – btl

+0

Können Sie mir ein Beispiel zeigen und ich kann überprüfen, ob ich bin? Wenn es etwas ist, was ich genau wissen sollte, dann habe ich es wahrscheinlich nicht getan. –

+0

Siehe meine Antwort für ein Beispiel @Alex Mac – btl

Antwort

0

In meiner RouteServiceProvider diese Funktion den Großteil meiner Anwendungen Routen lädt

protected function mapWebRoutes() 
{ 
    Route::group(array(
     'middleware' => ['web', 'auth'], 
     'namespace' => $this->namespace, 
    ), function ($router) { 
     require base_path('routes/web.php'); 
    }); 
} 

dann in app/Http/Kernel Ich habe

/** 
* The application's route middleware. 
* 
* @var array 
*/ 
protected $routeMiddleware = [ 
    'auth'    => \Illuminate\Auth\Middleware\Authenticate::class, 
    'auth.basic'  => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
]; 

Beachten Sie den Abschnitt 'middleware' => ['web', 'auth'], in der Routengruppe. Middleware kann auch auf einzelne Routen nach Bedarf angewendet werden.

+0

Ich bin verwirrt, weil nicht 'Web' a $ MiddlewareGroups und 'Auth' ein $ routeMiddleware? Wie konnten sie beide Middleware sein? Auch wenn ich dies anwendete, als ich meine Login-Ansicht und Login-Controller traf. Es wird umgeleitet, bis ich die maximale Anzahl von Weiterleitungen erreiche. –

+0

ja, aber bedenken Sie, dass Web und Auth nur Aliase sind, der Kernel wird sie einzeln auf den Middleware-Stack schieben. Verschieben Sie Ihren Aufruf Auth :: routes() an den Anfang. Ich erinnere mich, dass ich zuerst etwas über sie lesen musste. – btl

+0

Versuchen Sie, protected $ redirectTo = '/ register' zu ändern; zu Ihrer Teststrecke, die die Umleitungsschleife verursachen könnte. – btl

Verwandte Themen