Использование Auth::user в промежуточном программном обеспечении

Я пытаюсь проверить, совпадает ли введенный URL-адрес со слагом аутентифицированных пользователей в базе данных. Таким образом, если пользователь заходит на сайт example.com/user/bob-smith и на самом деле это Боб Смит, приложение позволит Бобу продолжить работу, потому что его слаг в таблице User — это bob-smith.

У меня есть зарегистрированное промежуточное программное обеспечение, но когда я

public function handle($request, Closure $next)
    {
        if($id != Auth::user()->slug){
            return 'This is not your page';
        }
        else{
            return $next($request);
        }
    }

я получил

Класс «App\Http\Middleware\Auth» не найден

Я не уверен, как использовать это внутри промежуточного программного обеспечения. Кто-нибудь может помочь?


person Community    schedule 22.04.2015    source источник


Ответы (1)


Это довольно легко. Похоже, вы не импортировали пространство имен для фасада Auth.

Поэтому либо добавить

<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth; // <- import the namespace

class YourMiddleware {
    ...
}

над объявлением класса или используйте полное имя класса в строке

if ($id != \Illuminate\Support\Facades\Auth::user()->slug) { 

В качестве альтернативы вы можете ввести экземпляр Guard в конструктор

<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Auth\Guard;

class YourMiddleware {

    protected $auth;

    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
    }

    public function handle($request, Closure $next) 
    {
        ...
        if ($id != $this->auth->user()->slug) {
        ...
    }
}
person peterm    schedule 22.04.2015
comment
Дох, я чувствую себя немного глупо, но это работает. Спасибо. - person ; 22.04.2015