suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Der Laravel 5.3-Authentifizierungsprüfungskonstruktor gibt „false“ zurück

Ich verwende Laravel 5.3 并且我试图在 constructor 方法中获取经过身份验证用户的 id, damit ich Benutzer wie folgt nach einem bestimmten Unternehmen filtern kann:

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

    }

Aber das bringt den Benutzer nicht zurück id。我什至尝试过 Auth::check()Aber es funktioniert nicht.

Wenn ich die Auth::check() 移出 __construct()-Methode hinzufüge, funktioniert es so:

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

Aber wenn ich es auch in den Konstruktor von HomeController einfüge, schlägt dies fehl!

Irgendwelche Ideen, warum dies fehlschlägt?

P粉769045426P粉769045426404 Tage vor588

Antworte allen(2)Ich werde antworten

  • P粉277464743

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

    自 5.3 Auth::check 起,它将无法在控制器的构造函数中工作,这是未记录的更改之一。因此,您需要将其移至中间件或检查控制器方法,或将项目移至 5.2.x。

    Antwort
    0
  • P粉489081732

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

    文档

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

    Antwort
    0
  • StornierenAntwort