2017-06-10 5 views
0

LoginControllerを使用してLaravel 5.4のログインユーザーを正常に認証しました。私はこれをしたことを知っている。しかし、私はAuth::guest()をチェックして、ログインしているユーザーのビューまたはゲストユーザーのビューを動的に表示しようとしています。しかし、私はいつもゲストのユーザーの視点を見ています。私は正常にユーザーにログインしましたが、Auth :: check()とAuth :: user()は動作していないようです

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で

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

ログイン後の認証が必要なルートに認証ミドルウェアを適用していますか? – btl

+0

私に例を見せてもらえますか?それが何かであれば、私はそのことをよく知っていなければならないでしょう。 –

+0

例については私の答えを見てください@Alex Mac – btl

答えて

0

この機能は、私のアプリケーションのルート

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

の大部分をロードするとアプリ/ HTTP /カーネルに私は

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

ルートグループの'middleware' => ['web', 'auth'],部分に注目してください。ミドルウェアは、必要に応じて個々のルートに適用することもできます。

+0

私は 'web'ではなく、$ middlewareGroupsと 'auth'は$ routeMiddlewareなので混乱していますか?それでは、どのようにして両者がミドルウェアになりますか?また、私がログインビューとログインコントローラにヒットしたときにこれを適用しました。私はリダイレクトの最大数に達するまでリダイレクトします。 –

+0

はい、ただし、webとauthは単なるエイリアスです。カーネルは、それらをミドルウェアスタックに個別にプッシュします。 Auth :: routes()コールを一番上に移動します。最初に優先順位を付ける必要があることについて、何かを読んで覚えています。 – btl

+0

protected $ redirectTo = '/ register'を変更してみてください。あなたのテストルートにも、リダイレクトループの原因となる可能性があります。 – btl

関連する問題