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

Я использую функцию аутентификации нескольких таблиц (пользователь, администратор) в laravel 5.2 для использования двух таблиц: одна для пользователей, а другая для администраторов. Все работает правильно, кроме функций промежуточного программного обеспечения. По умолчанию «auth» (Authenticate.php) не работает, и я создаю собственный «auth.super_admin» (SuperAdminMiddleware.php) для проверки того, что пользователь является ли администратор и результат одинаковыми. Вот мой файл auth.php

'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
        'admins' => [
            'driver'   => 'session',
            'provider' => 'admins'
        ]
    ],

Вот промежуточное ПО Authenicate и метод SuperAdminMiddleware:

Authenticate.php
public function handle($request, Closure $next, $guard = null)
    {
         if (Auth::guard($guard)->guest()) {
            if ($request->ajax() || $request->wantsJson()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->guest('login');
            }
        }

        return $next($request);
    }

SuperAdminMiddleware.php
public function handle($request, Closure $next)
    {

        if(\Auth::guard('admins')->check())
        {
            return $next($request);
        }
        return redirect('/');
    }

Поэтому, когда я использую auth в конструкторе контроллера, он не работает, и вызывается соответствующий метод. Что не так я делаю или упускаю?


person avijit bhattacharjee    schedule 02.07.2016    source источник
comment
Возможно, мне что-то не хватает в изображении, которое вы рисуете, но я не верю, что вы можете определить метод handle дважды в одном файле.   -  person Jeremy Anderson    schedule 05.07.2016
comment
Ни один метод не находится в промежуточном программном обеспечении Authenticate.php, а другой - в файле SuperAdminMiddleware.php. @JeremyAnderson   -  person avijit bhattacharjee    schedule 05.07.2016


Ответы (1)


Собственно проблему решил. Вот решение

Authenticate.php


public function handle($request, Closure $next, $guard = null)
    {
    /*
    |--------------------------------------------------------------------------
    | Authenticate Middleware
    |--------------------------------------------------------------------------
    |
    | This middleware is for checking whether user is from user table .
    | and authenticated.
    |
    */
        if (!Auth::user()) {
            return redirect('/');
        }else
        {
            return $next($request);

        }
    }

SuperAdminMiddleware.php

/*
    |--------------------------------------------------------------------------
    | Authenticate Middleware(Super Admin check)
    |--------------------------------------------------------------------------
    |
    | This middleware is for checking whether user is from admin table 
    | and super_admin .
    |
    */
    public function handle($request, Closure $next)
    {


        if (\Auth::guard('admins')->user()) {
            if(\Auth::guard('admins')->user()->type == 'super_admin')
                return $next($request);

            return redirect('/');
        }
        return redirect('/');
    }
person avijit bhattacharjee    schedule 05.07.2016