会话在Laravel中的基本控制器中不起作用

时间:2015-12-07 12:35:06

标签: laravel-5 laravel-5.1

问题

基本控制器正在用户控制器中扩展。我试图检查会话是否为空...如果是,它应该进入登录页面。但由于某些原因,这不起作用。

基本控制器

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');

1 个答案:

答案 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 = '/';

只是旁注,可能会为您的所有请求运行身份验证,会创建循环,因为用户甚至无法访问登录页面或主页。