中间件会影响数据库中插入的绑定

时间:2016-08-09 14:44:23

标签: php laravel laravel-5 laravel-5.2

我的laravel应用程序存在问题。

我想在路线上添加用于等级控制的中间件。

当我将自定义middelware添加到我的路由组时,SQL语句的绑定是双重的。

当我取消我的自定义中间件时,它的工作正常。

我真的不明白为什么。

有我的AuthRank.php:

class AuthRank {

public function handle($request, Closure $next, $rank)
{
    $response = $next($request);

    $user = Auth::user();

    if(!$user || $user->rank < $rank)
    {
          return redirect('/');
    }

    return $next($request);
}}

有我的Kernel.php:

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,
        \Adldap\Laravel\Middleware\WindowsAuthenticate::class, // Inserted here.
    ],
    'api' => [
        'throttle:60,1',
    ],
];

/**
 * The application's route middleware.
 *
 * These middleware may be assigned to groups or used individually.
 *
 * @var array
 */
protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'auth.rank' => \App\Http\Middleware\AuthRank::class, 
];

还有我的Routes.php摘录:

 Route::group(['prefix' => 'GestionUtilisateurs','middleware' =>'auth.rank:99'], function () 
{
    Route::post('/copy', ['uses' => 'userController@copyUser']);
});

自定义中间件问题的结果:

  

语句:插入MY_TABLE(DATE,USER_ID,ROLE_ID)值(:p0,:p1,:p2)   具约束力:[2016/08 / 09,2016 / 08 / 09,1,1,99,99]

没有我的自定义中间件它会返回我:

  

语句:插入MY_TABLE(DATE,USER_ID,ROLE_ID)值(:p0,:p1,:p2)   约束:[2016/08 / 09,1,99]

这很好

我知道&#34; web&#34;中间件默认情况下是

  

应用程序/提供商/ RouteServiceProvider.php

但是当我删除它时,我的身份证明无法正常工作。

为什么它不适用于我的自定义中间件?

谢谢!

1 个答案:

答案 0 :(得分:0)

我没有看到任何可能影响您的查询的代码。我看到的是你的代码中似乎有错误:

class AuthRank {

    public function handle($request, Closure $next, $rank)
    {
        // Isn't this repeated unnecessarily?
        // $response = $next($request);

        $user = Auth::user();

        if(!$user || $user->rank < $rank) {
            return redirect('/');
        }

        return $next($request);
    }
}

尝试删除多余的代码。如果它不起作用,请提供有关如何创建受影响查询的更多详细信息,我们可能会提供更多帮助。