Промежуточное ПО работает не так, как ожидалось - Laravel

Я хочу создать промежуточное ПО для защиты маршрутов администратора в приложении laravel 5.2. user_type - это не поле в таблице пользователей в моей базе данных, а отдельная таблица: введите описание изображения здесь

User_type_id администратора - 4 Я сделал это промежуточное ПО:

class AdminMiddleware
{

    public function handle($request, Closure $next)
    {
        $authedUserID = Auth::id();

        $user = User::query()
                ->leftjoin('users_user_types as uut', 'uut.user_id', '=', 'users.id')
                ->where('uut.user_id',"=","$authedUserID")
                ->get(['users.*',
                        'uut.user_type_id as userType'])->first();

        if ($user['userType'] !=4)
        {

            return redirect('/home');
        }

        return $next($request);
    }
}

и поместите это в массив $ routeMiddleware в kernel.php:

'admin' => \App\Http\Middleware\AdminMiddleware::class

и это один из административных маршрутов, на котором я хочу применить свое промежуточное ПО:

Route::get('ptyadmin', 'AdminController@show')->middleware('admin');

Проблема в том, что когда я перехожу на этот маршрут с пользователем с правами администратора (user_type = 4) или обычным пользователем (user_type = 1), в обоих случаях он перенаправляется на / home !!

Почему это происходит и как это исправить?


person Rowayda Khayri    schedule 02.04.2017    source источник
comment
Где ваша auth средняя война в пути?   -  person Mahbub    schedule 02.04.2017
comment
Я поместил его в AdminController: публичная функция __construct (User $ user, JWTAuth $ jwtauth) {$ this- ›промежуточное ПО ('jwt.auth', ['except' =› []]); } @mrabbani   -  person Rowayda Khayri    schedule 02.04.2017
comment
Выгрузить dd(Auth::id()) в AdminMiddleware и проверить значение?   -  person Mahbub    schedule 02.04.2017
comment
Спасибо @mrabbani, он работает, когда я помещаю промежуточное ПО jwt.auth в routes.php   -  person Rowayda Khayri    schedule 02.04.2017


Ответы (2)


first метод возвращает объект

if ($user->userType !=4)

Также используйте selectinstead get

->select(['users.*','uut.user_type_id as userType'])->first();
person Niklesh Raut    schedule 02.04.2017
comment
Да, я пытался использовать его как объект, но он возвращал ошибку, потому что пользователь не был аутентифицирован до того, как я нашел ответ, чтобы исправить это. Но теперь это работает, спасибо. - person Rowayda Khayri; 02.04.2017
comment
Почему вы предлагаете использовать select () вместо get () ?? @Niklesh - person Rowayda Khayri; 02.04.2017
comment
Get - это получение результата, а select - для настраиваемых столбцов: laravel.com/docs/5.4/queries #selects, - person Niklesh Raut; 02.04.2017

Он работает, когда я помещаю промежуточное ПО jwt.auth в routes.php:

Route::get('ptyadmin', 'AdminController@show')
->middleware('jwt.auth')
->middleware('admin');

вместо того, чтобы поместить его в AdminController:

public function __construct(User $user, JWTAuth $jwtauth)

{

   $this->middleware('jwt.auth', ['except' => []]);

}

person Rowayda Khayri    schedule 02.04.2017
comment
Но почему это происходит ?? это потому, что, когда я помещаю его в AdminController, сначала применяется промежуточное программное обеспечение администратора? @mrabbani - person Rowayda Khayri; 02.04.2017