php - Laravel 5.3 auth check en el constructor devuelve false
authentication laravel-5.3 (3)
Dado que 5.3
Auth::check
no funcionará en el constructor de un controlador, es uno de los cambios no documentados.
Por lo tanto, debe moverlo al middleware o verificar los métodos del controlador o mover el proyecto a 5.2.x.
Estoy usando
Laravel 5.3
y estoy tratando de obtener la
id
del usuario
autenticado
en el método del
constructor
para poder filtrar al usuario por compañía asignada de la siguiente manera:
namespace App/Http/Controllers;
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/Models/User;
use App/Models/Company;
use Illuminate/Support/Facades/Auth;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests ;
public $user;
public $company;
public function __construct()
{
$companies = Company::pluck(''name'', ''id'');
$companies->prepend(''Please select'');
view()->share(''companies'', $companies);
$this->user = User::with(''profile'')->where(''id'', /Auth::id())->first();
if(isset($this->user->company_id)){
$this->company = Company::find($this->user->company_id);
if (!isset($this->company)) {
$this->company = new Company();
}
view()->share(''company'', $this->company);
view()->share(''user'', $this->user);
}
}
Sin embargo, esto no devuelve la
id
usuario.
Incluso probé
Auth::check()
y no funciona.
Si muevo
Auth::check()
fuera del método
__construct()
, esto funciona de la siguiente manera:
<?php
namespace App/Http/Controllers;
use Illuminate/Http/Request;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
$this->middleware(''auth'');
}
/**
* Show the application dashboard.
*
* @return /Illuminate/Http/Response
*/
public function index()
{
dd(/Auth::check());
return view(''home'');
}
}
Sin embargo, esto
falla
si pongo esto en el método de construcción en
HomeController
también.
¿Alguna idea de por qué esto está fallando?
Falla porque llamas a
$this->middleware(''auth'');
después del
parent::__construct();
.
Significa que el middleware de autenticación no está cargado correctamente.
no puede acceder a la sesión o al usuario autenticado en el constructor de su controlador porque el middleware aún no se ha ejecutado.
Como alternativa, puede definir un middleware basado en Closure directamente en el constructor de su controlador. Antes de usar esta función, asegúrese de que su aplicación esté ejecutando Laravel 5.3.4 o superior:
class ProjectController extends Controller
{
/**
* All of the current user''s projects.
*/
protected $projects;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->projects = Auth::user()->projects;
return $next($request);
});
}
}