Фильтр и аутентификация Laravel

У меня есть контроллер, который обрабатывает фильтры запросов, теперь, когда часть фильтра требует, чтобы пользователи вошли в систему, чтобы применить фильтр. Какой для этого лучший подход? ценю любую помощь! большое спасибо!

Маршрут API: Route :: get ('список игрушек', 'список игрушек @ index');

use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Toylist;

class ToyslistController extends Controller
{
    public function index(Request $request)
    {
        $toyslist = (new Toylist)->newQuery();

        if ($request->has('type')){
            $toy_typeArray = explode(',',$request->type);
            $toyslist->whereIn('type',$toy_typeArray);
        }

        if ($request->has('age')){
            $toy_ageArray = explode(',',$request->type);
            $toyslist->whereIn('age',$toy_ageArray);
        }

        if ($request->has('brand')){
            $toy_brandArray = explode(',',$request->type);
            $toyslist->whereIn('brand',$toy_brandArray);
        }

        if ($request->has('storage')){
            if (Auth::check()){
                $toy_storageArray = explode(',',$request->type);
                $toyslist->whereIn('storage',$toy_storageArray);
            }
        }

        return $toyslist->paginate(15);
    }
}

Что не так с вашим нынешним подходом?

Classified 05.06.2018 09:50

с Route :: get Auth :: check () или Auth :: id () всегда возвращает пустое значение, я не хочу использовать промежуточное ПО в маршруте, чтобы заблокировать публичное использование фильтров. Есть ли способ сделать это или мне нужно воспроизвести тот же метод с промежуточным программным обеспечением маршрута и оставить это промежуточному программному обеспечению без маршрута?

NewProgrammer 05.06.2018 09:55

Единственное, что я бы изменил, - это поставить проверку аутентификации в проверке над ней, например. if ($request->has('storage') && Auth::check()) {.

Rwd 05.06.2018 09:55

Auth::check() не должен возвращать false, если пользователь не вошел в систему. Используете ли вы промежуточное ПО web по вашему запросу или это маршрут API?

Classified 05.06.2018 09:57

Просто проверяю, но я предполагаю, что $request->type не предназначен для использования во всех операторах if?

Rwd 05.06.2018 09:59

это в маршруте Api

NewProgrammer 05.06.2018 10:01

Извините, я не понимаю, о чем вы? Росс

NewProgrammer 05.06.2018 10:02

@NewProgrammer Он ссылается на все операторы if, используя $request->type в качестве аргумента взрыва. Также по умолчанию проверка подлинности API отличается от проверки подлинности в Интернете, поэтому вы получаете ответ null / false.

Classified 05.06.2018 10:05

запрос if $ предназначен для использования таким образом, поскольку интерфейс использует localhost / api / toyslist? brand = 1,2,3 & age = 5,9

NewProgrammer 05.06.2018 10:07

Вы используете один и тот же ввод для всех массивов. Эффективно выполняя следующий localhost/api/toyslist?type=1,2,3&age=5,9, тогда ваш массив типа и возраста вернет этот type: 1,2,3age: 1,2,3

Classified 05.06.2018 10:09

да, это для того, чтобы иметь возможность использовать whereIn для запроса. Но проблема с функциями фасада Auth все еще существует. Есть идеи, что будет лучше?

NewProgrammer 05.06.2018 10:17

По умолчанию маршруты API не запускают сеанс, поскольку они не имеют состояния. Предполагается, что API не имеет состояния и не должен полагаться на сеансы. Если вы хотите использовать аутентификацию на основе сеанса, используйте Web Guard для своих маршрутов.

Classified 05.06.2018 10:24

Да, Toyslist является частью API и не имеет состояния. Но только определенный фильтр требует, чтобы пользователь вошел в систему. Если я не использую аутентификацию на основе сеанса, как еще мне подойти к ситуации?

NewProgrammer 05.06.2018 10:38

@NewProgrammer Вы можете использовать что-то вроде Паспорт Laravel

Classified 05.06.2018 11:27

Я уже реализовал паспорт, логин основан на паспорте

NewProgrammer 05.06.2018 11:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
15
79
1

Ответы 1

На данный момент я сделал следующее, чтобы это работало:

Добавлен маршрут API:

Route::middleware('auth:api')->get('protectedtoyslist','toyslistController@index');
Route::get('toyslist','toyslistController@index');

Таким образом, интерфейс использует localhost/api/toyslist для фильтрации продуктов без фильтра хранения для пользователей, которые не вошли в систему.

Для вошедших в систему пользователей интерфейс использует localhost/api/protectedtoyslist для фильтрации продуктов, которые включают фильтр хранения.

Очень признателен, если у кого-то есть лучший подход для этого. Спасибо!

Другие вопросы по теме