2017-05-22 3 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 그룹에 새 미들웨어를 추가하지 마십시오. 이렇게하면 웹의 모든 경로가이 미들웨어 그룹을 사용할 것이기 때문에 무한 리디렉션이 발생합니다. 대신 새 미들웨어를 사용하여 보호하려는 경로에 수동으로 추가하지 않으면 인증 또는 관리 그룹에 새 경로를 추가하십시오. 또한 미사용 사용자를 리디렉션하는 경로를 미들웨어에서 제외해야합니다.

+0

그래, 그 문제가 발생했습니다. 나는 내 문제가 무엇인지 알아 냈다 : 나는 불필요한 관계가 있었다. 그러나 당신의 제안은 효과가있는 것 같습니다. 감사! –

관련 문제