2016-11-03 2 views
3

5.2 -> 5.3에서 업그레이드했으며 Auth::user()null을 반환합니다. 생성자 showMainAuth::check() 수익을 전화로 Auth::check() 반환 nullLaravel 5.2 -> 5.3 null을 반환하는 Auth :: user()

public $user; 
public function __construct() { 
    $this->user = Auth::user(); 
} 

public function showMain() { 
    return $this->user; 
} 

컨트롤러 전화와

경로

Route::group(['middleware' => ['auth']], function() { 
    Route::get('/test', '[email protected]'); 
} 

컨트롤러 (예상대로) User.

public function __construct() { 
    // Nothing 
} 

public function showMain() { 
    return Auth::user(); 
} 

또한 5.3과 5.2-> 5.3의 새로 설치 사이의 차이점을 살펴 보았습니다. 5.3에는 업그레이드 된 버전이 아닌 2 개의 추가 클래스가 있습니다.

  • Authenticate.php
  • Authorize.php는

그리고 이러한 클래스가 나는 또한 \Auth::user() is null in 5.3.6?을 검토 한 결과 protected $routeMiddelware

Kernel.php에 의해 호출되고,뿐만 아니라이되지 않습니다 내 구체적인 문제를 해결, 나는 또한 좋은 해결책이라고 생각하지 않습니다.

누군가이 설명을 왜 나에게 설명 할 수 있습니까?

+2

당신이 세션 또는 인증 된 사용자에 액세스 할 수 없습니다 당신의 컨트롤러의 생성자 (미들웨어가 아직 실행되지 않았기 때문에) [docs] (https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors) –

답변

6

미들웨어가 아직 실행되지 않았기 때문에 Larvel 5.3에서 현재 로그인 한 사용자를 얻을 수 없지만 다른 컨트롤러 메서드에서는 showMain처럼 문제가 없습니다.

Laravel 마이그레이션 가이드 발췌 : Laravel 이전 버전의

, 당신은 세션 변수 나 컨트롤러의 생성자에서 인증 된 사용자에 액세스 할 수 있습니다. 이것은 결코 프레임 워크의 명백한 특징이되는 것은 아닙니다. Laravel 5.3에서는 미들웨어가 아직 실행되지 않았기 때문에 컨트롤러의 생성자에서 세션이나 인증 된 사용자에게 액세스 할 수 없습니다.

https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors

+0

나를 위해 일하는 TY 형! – Marcaum54

3

__constructor()에서 Auth::user()에 대한 액세스 권한을 실행해야합니다 (Laravel 5.3로 시작)으로 활용하려면 다음

public $user; 
public function __construct() { 
    $this->middleware(function ($request, $next) { 
     $this->user = Auth::user(); 
     return $next($request); 
    }); 
}