【发布时间】:2020-08-14 22:01:39
【问题描述】:
编辑:更好的例子
我遇到了在 SectionsController 构造函数之后调用的 checkauth 控制器的问题 - 这是扩展的 ReportController,我不知道为什么它会这样工作。 我尝试在 SectionController costruct 的开头添加中间件,例如 $this->middleware('checkauth'); 但也不起作用。
中间件
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class CheckAuth
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!Auth::check())
{
return redirect('/admin/login')->withErrors(['message' => 'You need to login before proceeding']);
}
return $next($request);
}
}
节控制器
<?php
namespace App\Http\Controllers\RMReport;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Support\Facades\View;
use App\Http\Controllers\Controller;
use Illuminate\Http\UploadedFile;
class SectionsController extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
protected $user;
public function __construct(){
$this->middleware('checkauth');
dump("SECTIONSCONTROLLER: ");
dump(\Auth::check());
//PROBLEM HERE - \Auth::Check is false , \Auth::user is null
$this->user = \Auth::user();
if( !$this->user->can('something') ) return redirect()->route('someroute');
}
}
报表控制器
<?php
namespace App\Http\Controllers\RMReport\Form;
use App\Http\Controllers\RMReport\SectionsController;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
class ReportController extends SectionsController
{
public function form(){
if( $this->user->status != 'Active'){
return something;
}
return another something;
}
}
从路由列表输出
GET|HEAD | admin/remote-report/{id?} | rm.report | App\Http\Controllers\RMReport\Form\ReportController@form | web,checkauth,checkownerRMreport |
POST | admin/remote-report/{id?} | rm.report | App\Http\Controllers\RMReport\Form\ReportController@store | web,checkauth,checkownerRMreport |
调用 GET 输出
"SECTIONSCONTROLLER: "
false
"CHECKAUTH:"
true
【问题讨论】:
-
您是否只是想知道为什么
dump(\Auth::check());是false,即使它是在->middleware('checkauth')call 之后调用的,还是您的代码还有更多内容? -
感谢您的回复。我需要保存有关用户(用户对象和一些关系)的构造信息。从这个控制器(
SectionsController)继承其他控制器(例如ReportController),然后我需要在这个控制器中使用这些信息。所以是的,我想知道为什么是false以及如何在控制器之前调用中间件以便下次使用控制器构造中的Auth信息。
标签: php laravel laravel-5 middleware laravel-middleware