我编写了自定义中间件,但是执行该中间件时会出现错误。 中间件:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
use App\Employee;
class CheckConfirm
{
public function handle($request, Closure $next)
{
if(Auth::check())
{
$id = Auth::id();
$empl = Employee::where('user_id','=', $id)->get();
if($empl->isEmpty())
{
return route('confirm');
}
else
{
dump($empl);
return $next($request);
}
}
else
{
return route('login');
}
}
}
当我尝试这样的事情时:
if($empl===null)
{
return route('confirm');
}
сondition根本不起作用。 在这种情况下,数据库查询将成功执行。 Here is the error page with dump
答案 0 :(得分:2)
您的中间件必须返回Response
对象或$next($request)
。按照书面规定,当未登录或$empl
为空时,中间件只是返回一个字符串,而不是重定向。
将您的退货更新至:
return redirect()->route('confirm');
和
return redirect()->route('login');
分别。
答案 1 :(得分:1)
很难修复,我尝试使用App \ Http \ Middleware \ VerifyCsrfToken :: except来解决,但是不起作用。
我对此问题的解决方案是使用App \ Exception \ Handler :: render方法创建到另一条路由的重定向。
<div id="companiesGrid" class="col" style="margin-top:15px">
<angular-slickgrid appSlickgridTour gridId="compGridList" [columnDefinitions]="columnDefinitions"
[gridOptions]="gridOptions" [dataset]="dataset" (onAngularGridCreated)="angularGridReady($event)">
</angular-slickgrid>
</div>
答案 2 :(得分:0)
替换此行:
$empl = Employee::where('user_id','=', $id)->get();
if($empl->isEmpty()){ ... }
与此:
$empl = Employee::where('user_id', $id)->first();
if($empl){ ... }
然后在每行的dd()处查看失败之处。可能缺少csrf令牌,或者用户未登录。