我的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
但是当我删除它时,我的身份证明无法正常工作。
为什么它不适用于我的自定义中间件?
谢谢!答案 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);
}
}
尝试删除多余的代码。如果它不起作用,请提供有关如何创建受影响查询的更多详细信息,我们可能会提供更多帮助。