2016-11-03 2 views
3

Я обновил с 5.2 до 5.3, а Auth::user() возвращает null.Laravel 5.2 -> 5.3 Auth :: user() return null

Маршрут

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

Контроллер с конструктором вызова Auth::check() возвращает null

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

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

контроллера с showMain вызова Auth::check() возвращается User (как и ожидалось).

public function __construct() { 
    // Nothing 
} 

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

Я также рассмотрел разницу между чистой установкой 5.3 и 5.2-> 5.3, обновленной. В 5.3 есть еще 2 дополнительных класса, которые не находятся в обновленной версии.

  • Authenticate.php
  • Authorize.php

И эти классы называют по Kernel.php в protected $routeMiddelware

Я также посмотрел в \Auth::user() is null in 5.3.6?, не только это не решить мою конкретную проблему, я также не думаю, что это хорошее решение.

Может кто-нибудь объяснить мне, почему я сталкиваюсь с этой проблемой?

+2

вы не можете получить доступ к сессии или аутентификации пользователя в вашем конструктор контроллера, потому что промежуточное программное обеспечение еще не запущено [docs] (https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors) –

ответ

6

Начиная с Laravel 5.3, пользователь не может войти в систему в контроллер, потому что промежуточное программное обеспечение еще не запущено, но в других методах контроллера, поскольку у вас есть showMain, нет проблем с его получением.

Laravel миграция руководство отрывок:

В предыдущих версиях Laravel, вы можете получить доступ к переменному сеансу или аутентификацию пользователя в конструкторе вашего контроллера. Это никогда не предназначалось для явной черты структуры. В Laravel 5.3 вы не можете получить доступ к сеансу или аутентифицированному пользователю в конструкторе вашего контроллера, потому что промежуточное программное обеспечение еще не запущено.

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

+0

Работает для меня, TY bro! – Marcaum54

3

Чтобы получить доступ к Auth::user() в __constructor() (начиная с Laravel 5.3) вам необходимо запустить:

public $user; 
public function __construct() { 
    $this->middleware(function ($request, $next) { 
     $this->user = Auth::user(); 
     return $next($request); 
    }); 
} 
Смежные вопросы