Auth::user() возвращает ноль

Я использую Laravel 5.2 и у меня проблемы с промежуточным ПО. Код в файле ways.php

    использовать Illuminate\Contracts\Auth\Access\Gate;


    Route::group(['middleware' => 'web'], function () {

        Route:: Auth();

        Route::get('/', 'HomeController@index');
    });


    Route::group(['prefix'=>'admin',  'middleware' => 'admin'], function(){
        Route::get('/', function(){
            обратный просмотр ('admin.index');
        });
        Route::get('/user', function(){
            обратный просмотр ('admin.user');
        });
    });

Kernel.php:

    protected $ routeMiddleware = [...
     'admin' => \ App \ Http \ Middleware \ AdminPanel:: class,
    ];

AdminPanel.php

    Пространство имен App\Http\Middleware; использовать Закрытие; использовать Освещение \ Поддержка \ Фасады \ Auth; использовать приложение \ роль;

    class AdminPanel
    {дескриптор публичной функции ($request, Closure $next)
        {
            $user = Auth::user(); дд ($ пользователю);

            if($user){
                $role = Role::whereName('admin')->first();
                if($user->hasRole($role)){
                    return $next($request);
                }
            }
            return redirect('/');
        } 

Так,

$user = Auth::user () 
всегда возвращать ноль. Спасибо за предложения!

9 ответов

Решение

Любой маршрут, который использует Auth() должны быть заключены в web промежуточное программное обеспечение. Ты рядом, просто двигай Route::group(['prefix' => 'admin'], ...) в группу выше.

Route::group(['middleware' => 'web'], function () {

    Route::auth();

    Route::get('/', 'HomeController@index');

    // Moving here will ensure that sessions, csrf, etc. is included in all these routes
    Route::group(['prefix'=>'admin',  'middleware' => 'admin'], function(){
        Route::get('/', function(){
            return view('admin.index');
        });

        Route::get('/user', function(){
            return view('admin.user');
        });
    });
});

Я столкнулся с ситуацией, когда Auth::user() всегда возвращается nullэто было потому, что я пытался получить User в конструкторе контроллера.

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

В качестве альтернативы вы можете определить промежуточное ПО на основе Closure непосредственно в конструкторе вашего контроллера.

namespace App\Http\Controllers;

use App\User;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;

class ProjectController extends Controller
{
    protected $user;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware(function ($request, $next) {

            $this->user = Auth::user();

            return $next($request);
        });
    }
}

Определите середину в конструкторе вашего контроллера, и здесь он поможет

public function __construct()
{
    $this->middleware('auth:api');
}

У меня была такая же проблема, потому что я не установил имя таблицы.

/**
 * The table associated with the model.
 *
 * @var string
 */
protected $table = 'users';

Я нашел решение в старом коде

          function getAuth($guard, $get)
{
    return auth($guard)->user()->$get;
}

добавьте эту ^ в качестве вспомогательной функции и используйте ее везде, где хотите, например:

      getAuth('user', 'id');

Вы можете использовать его вот так.

      $this->middleware(function ($request, $next) {
            //Your Code Here 
            return $next($request);
        });

Это сработало для меня.

просто включите свое промежуточное ПО аутентификации в вызов

      $user = auth('middleware')->user()
Route::middleware('auth:api')->group(function () {
    Route::get('/details', 'UserController@details');
});

Мой Auth::user() возвращение null в виду, когда

  • У меня нет таблицы пользователей в базе данных
  • У меня нет поля id в качестве первичного ключа пользователей таблицы
Другие вопросы по тегам