Laravel условие в маршрутах (Routes)

153
06 марта 2019, 02:20

У меня есть маршруты (пример):

Route::get('/test', 'TestController@index');
Route::post('/test', 'TestController@post');
                  .......
Route::get('/testn', 'TestController@indexn');
Route::post('/testn', 'TestController@postn');

Требуется добавить к этим маршрутам определённых посредников (middleware) если пользователь аунтифицирован (а если нет, то как есть).

Понимаю что это легко организовать через сами контроллеры, но если маршрутов очень много (и требуется добавить одинаковых посредников), то я считаю что это не практично писать условия с посредниками в контроллерах.

Как сейчас работает:

if (auth()->check()){
    Route::group(['middleware' => ['verified', 'ip']], function() {
        Route::get('/test', 'TestController@index');
        Route::post('/test', 'TestController@post');
                  .......
        Route::get('/testn', 'TestController@indexn');
        Route::post('/testn', 'TestController@postn');
    });
} else {
    Route::get('/test', 'TestController@index');
    Route::post('/test', 'TestController@post');
                  .......
    Route::get('/testn', 'TestController@indexn');
    Route::post('/testn', 'TestController@postn');
}

Задача отсеять мультиаккаунтсво. Если пользователь не авторизован, сёрфи спокойно (половина материала скрыта пока не авторизуешься), но если авторизован с ip с которого заходил кто-то ещё или проделывал определённые действия, показываю страничку с баном и тд

Требуется ваша помощь, знатоки!

Answer 1

Открываем документацию и читаем

Route::middleware(['first', 'second'])->group(function () {
    Route::get('/', function () {
        // Uses first & second Middleware
    });
    Route::get('user/profile', function () {
        // Uses first & second Middleware
    });
});

Вы можете делать вложенные одна в другую группы. Но я считаю, что у вас неправильная логика приложения, которая сама по себе допускает дублирование кода. Так или иначе, а проверок вам не избежать. Ну или вот так

Route::middleware(['auth', 'ip', 'verified'])->group(function () {...

Или объединить всё в одним посредник. Но опять вообще не ясно, зачем одни и те же роуты проверять.

READ ALSO
Форма авторизации php

Форма авторизации php

Есть сайт, на котором надо сделать форму авторизацииОна должна проверять наличие данного пользователя в MySQL по введенному им логину и паролю

177
Сайт не отдает заголовков и возвращает пустой результат на любой запрос

Сайт не отдает заголовков и возвращает пустой результат на любой запрос

Возникла проблема: внезапно сайт поставщика, с которого я собираю остатки начал отдавать пустой результатfile_get_contents возвращает пустоту

173
Как через echo выдать переменную [закрыт]

Как через echo выдать переменную [закрыт]

Как через echo выдать переменную "$text" ?

193