Laravel 5.3中间件后卫不工作

Laravel 5.3中间件后卫不工作

问题描述:

最近我已经升级到Laravel 5.3Laravel 5.2之后,我发现Localization中间件,我创建用于设置用户的语言已停止工作,不知道为什么?Laravel 5.3中间件后卫不工作

我使用的是基于authenticationtoken

中间件是:

<?php namespace App\Http\Middleware; 

use Closure; 
use PhpSpec\Exception\Exception; 
use Illuminate\Support\Facades\Auth; 


class Localization { 

    public function handle($request, Closure $next, $guard = null) 
    { 
     if(!Auth::guard()->guest()) 
     { 
      if(!session('current_locale')) { 
       $localecode = Auth::guard($guard)->user()->getLocale(); 
       session('current_locale',empty ($localecode) ? 'en' : $localecode); 
       \App::setLocale($localecode); 
      }else{ 
       \App::setLocale(session('current_locale')); 
      } 
     } 
     return $next($request); 
    } 

} 

而且我routes/api.php是:

Route::group(['prefix' => 'api/service/v1', 'middleware' => ['api'], 'guard' => 'api'], function(){ 
    Route::get("someUrlHere","[email protected]"); 
    Route::group(['middleware' => ['auth:api','localization','beforeMiddleware', 'afterApiCallMiddleware'], 'guard' => 'api'], function() { 
     Route::get("SomeOtherUrlHere","[email protected]"); 
    }); 
}); 

config/auth.php是:

<?php 

return [ 
    'defaults' => [ 
     'guard' => 'web', 
     'passwords' => 'users', 
    ], 

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

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

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

    'passwords' => [ 
     'users' => [ 
      'provider' => 'users', 
      'email' => 'auth.emails.password', 
      'table' => 'password_resets', 
      'expire' => 60, 
     ], 
    ], 
]; 

app/Http/Kernal.php是:

<?php namespace App\Http; 

use Illuminate\Foundation\Http\Kernel as HttpKernel; 

class Kernel extends HttpKernel { 

    protected $middleware = [ 
     \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
     'Barryvdh\Cors\HandleCors', 

    ]; 

    protected $middlewareGroups = [ 
     'web' => [ 
      \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, 
      \Illuminate\Routing\Middleware\SubstituteBindings::class, 
     ], 

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

    protected $routeMiddleware = [ 
     'auth' => 'App\Http\Middleware\Authenticate', 
     'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',  
     'guest' => 'App\Http\Middleware\RedirectIfAuthenticated', 
     'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 
     'localization'=>'App\Http\Middleware\Localization', 
     'afterMiddleware' => 'App\Http\Middleware\AfterMiddleware', 
     'beforeMiddleware' => 'App\Http\Middleware\BeforeMiddleware', 
     'afterApiCallMiddleware' => 'App\Http\Middleware\AfterApiCall', 
     'can' => \Illuminate\Auth\Middleware\Authorize::class, 
     'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 
    ]; 

} 

每次调用该方法时,我发现$guardhandle()方法的Localization中间件的方法。

+0

显示您的auth.php – msonowal

+0

好的。让我发布它。 – Dev

+0

@msonowal我已经发布了它。 – Dev

由于$guard是中间件中的附加参数,因此您必须手动将其传递。你应该能够从这样做可以改变你的路线::组中间件阵列值:

'localization' 

到:

'localization:api' 

希望这有助于!

+0

它的工作原理。非常感谢。 – Dev