【问题标题】:Laravel 5.3 middleware guard not workingLaravel 5.3 中间件防护不起作用
【发布时间】:2017-01-02 12:23:12
【问题描述】:

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

我正在使用基于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","SomeControler@SomeMethod");
    Route::group(['middleware' => ['auth:api','localization','beforeMiddleware', 'afterApiCallMiddleware'], 'guard' => 'api'], function() {
        Route::get("SomeOtherUrlHere","SomeOtherControler@SomeOtherMethod");
    });
});

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,
    ];

}

每次调用该方法时,我在Localization 中间件的handle() 方法中发现$guard 为空。

【问题讨论】:

  • 显示你的 auth.php
  • 好的。让我发一下。
  • @msonowal 我已经发布了。
  • 您还介意发布您的app/Http/Kernel.php吗?
  • 您是否尝试通过指定 $guard='api' 来更改公共函数句柄($request, Closure $next, $guard = null)

标签: laravel laravel-5.3 middleware


【解决方案1】:

因为$guard 是中间件中的一个附加参数,您必须手动传递它。您应该能够通过以下方式更改 Route::group 中间件数组中的值:

'localization'

到:

'localization:api'

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多