recherche

Maison  >  Questions et réponses  >  le corps du texte

Le constructeur de vérification d'authentification Laravel 5.3 renvoie false

J'utilise Laravel 5.3 并且我试图在 constructor 方法中获取经过身份验证用户的 id pour pouvoir filtrer les utilisateurs par entreprise spécifique comme ceci :

namespace AppHttpControllers;

use IlluminateFoundationBusDispatchesJobs;
use IlluminateRoutingController as BaseController;
use IlluminateFoundationValidationValidatesRequests;
use IlluminateFoundationAuthAccessAuthorizesRequests;
use IlluminateSupportFacadesView;
use AppModelsUser;
use AppModelsCompany;
use IlluminateSupportFacadesAuth;


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

    }

Mais cela ne renvoie pas l'utilisateur id。我什至尝试过 Auth::check()Mais ça ne marche pas.

Si j'ajoute la méthode Auth::check() 移出 __construct(), cela fonctionne comme ceci :

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return IlluminateHttpResponse
     */
    public function index()
    {
        dd(Auth::check());
        return view('home');
    }
}

Mais si je le mets également dans le constructeur de HomeController, cela échoue !

Une idée de la raison pour laquelle cela échoue ?

P粉769045426P粉769045426404 Il y a quelques jours586

répondre à tous(2)je répondrai

  • P粉277464743

    P粉2774647432023-10-25 11:42:59

    À partir de la version 5.3 Auth::check cela ne fonctionnera pas dans le constructeur du contrôleur, c'est l'un des changements non documentés. Vous devez donc le déplacer vers le middleware ou vérifier la méthode du contrôleur, ou déplacer votre projet vers 5.2.x.

    répondre
    0
  • P粉489081732

    P粉4890817322023-10-25 00:38:34

    Documentation

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

    répondre
    0
  • Annulerrépondre