2017-05-22 1 views
0

禁止された(またはこの場合は「非アクティブな」)ユーザーを特別なビューにリダイレクトするためのミドルウェアの作成に問題があります。それはまったく動作していないように見えるので、欠けているものがなければなりません。Laravelの禁止/非アクティブユーザーミドルウェアの問題

ミドルウェア

namespace App\Http\Middleware; 

use Closure; 
use Auth; 

class NotInactive extends Auth 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if (Auth::user()->isInactive()) 
    { 

     return redirect('/inactive'); 

    } 
    else{ 
     return $next($request); 
    } 
    } 
} 

Kernel.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, 
      \App\Http\Middleware\NotInactive::class, 

     ], 

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

    'admin' => [ 
     \App\Http\Middleware\EncryptCookies::class, 
     \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
     \Illuminate\Session\Middleware\StartSession::class, 
     \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
     \App\Http\Middleware\VerifyCsrfToken::class, 
     \App\Http\Middleware\Admin::class, 
    ] 

    ]; 

    /** 
    * 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, 
     'notinactive' => \App\Http\Middleware\NotInactive::class, 
    ]; 
} 

User.php

namespace App; 

use Illuminate\Notifications\Notifiable; 
use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 
    use Notifiable; 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'id', 'first_name', 'last_name', 'middle', 'email', 'status', 'role' 
    ]; 

    /** 
    * The attributes that should be hidden for arrays. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 
     'password', 'remember_token' 
    ]; 

    // Gets all of the skills the user knows 
    public function skills() 
    { 
     return $this->belongsToMany('App\Skill')->withPivot('skill_level'); 
    } 

    // Gets all of the roles this user holds 
    public function roles() 
    { 
    return $this->belongsToMany('App\Role', 'role_user'); 
    } 

    public function isAdmin() 
    { 
     return $this->roles()->where('name', 'Admin')->exists(); 
    } 

    public function isInactive() 
    { 
     return $this->roles()->where('name', 'Inactive')->exists(); 
    } 
} 

についてどのような考えは、私が欠けている何か私が間違っていたどこ?しかし、それはどんなエラーも吐き出すことはありません。

答えて

0

webグループに新しいミドルウェアを追加しないでください。これにより、Web用のすべてのルートがこのミドルウェアグループを使用するため、無限のリダイレクトが発生します。代わりに、新しいミドルウェアを使用して保護したいルートに手動で追加しない場合は、authまたはadminグループに新しいルートを追加します。また、非アクティブなユーザーをミドルウェアからリダイレクトするルートを除外してください。

+0

ええ、私はその問題に遭遇しました。私の問題は何だったのか分かりました。私は不必要な関係を持っていました。しかし、あなたの提案はうまくいったようです。ありがとう! –

関連する問題