【发布时间】:2016-08-09 14:44:22
【问题描述】:
我的 laravel 应用有问题。
我想在路由上添加用于等级控制的中间件。
当我将自定义中间件添加到我的路由组时,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]
这很好
我知道默认情况下的“网络”中间件
app/providers/RouteServiceProvider.php
但是当我删除它时,我的身份验证不起作用。
为什么它不适用于我的自定义中间件?
谢谢!
【问题讨论】:
-
您在中间件中调用了
$next($request);两次。你的控制器的动作被执行了两次。所以,你得到了 TWICE 的记录。您发现这是因为您的中间件,您没有检查您在其中重复两次的内容?
标签: php laravel laravel-5 laravel-5.2