问题
基本控制器正在用户控制器中扩展。我试图检查会话是否为空...如果是,它应该进入登录页面。但由于某些原因,这不起作用。
基本控制器
class BaseController extends Controller
{
public function __construct() {
$user = Session::get('User');
if ($user == null)
{
return Redirect('/');
}
}
}
用户控制器
class UserController extends BaseController
{
public function AllUsers()
{
$Users = \App\Models\User_Model::all();
return view("/User/List", array("Users" => $Users));
}
}
帐户控制器
class AccountController extends Controller
{
public function index()
{
return view("/User/login");
}
}
路线
Route::get('/', 'AccountController@index');
Route::get('/Users', 'UserController@AllUsers');
答案 0 :(得分:1)
这不是正确的方法。使用中间件在每个操作之前运行一些东西。
默认情况下,auth
中间件会处理。
class UserController extends Controller
{
/**
* Instantiate a new UserController instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
}
如果您希望中间件针对您的所有请求运行,请将其添加到您的内核中。在app/Http/Kernel.php
文件中,添加以下内容:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\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,
\App\Http\Middleware\Authenticate::class, //add this one only, the rest should be there by default.
];
在app\Controllers\AuthController.php
中,更改默认路线:
protected $redirectPath = '/';
只是旁注,可能会为您的所有请求运行身份验证,会创建循环,因为用户甚至无法访问登录页面或主页。