#laravel #laravel-routing #laravel-5.3 #laravel-middleware #laravel-authorization
#laravel #laravel-маршрутизация #laravel-5.3 #laravel-промежуточное программное обеспечение #laravel-авторизация
Вопрос:
Я настраиваю приложение laravel 5.3, которое использует пользовательские пакеты и промежуточное программное обеспечение проверки подлинности laravel. Когда я определяю маршруты в laravel/packages/vendor/packageName/src/routes.php как это имеет место в
Route::get('member/list', function() {
return 'member lists here';
})->middleware('auth');
оно перенаправляет на URL localhost:8000 / dashboard, определенный в RedirectIfAuthenticated промежуточном программном обеспечении, но когда я определяю маршрут в resources/routes/web.php , он направляет и авторизует по мере необходимости.
Есть ли что-то, что я делаю неправильно, или что-то, что мне нужно проверить?
—Обновление — Ниже приведен фрагмент из моего класса ServiceProvider
namespace BeansoftPractitionerIMS;
use IlluminateSupportServiceProvider;
class PractitionerIMSServiceProvider extends ServiceProvider {
public function register() {
$this->app->bind('practitionerims', function($app) {
return new PractitionerIMS;
});
}
public function boot() {
//load the routes file
if (!$this->app->routesAreCached()) {
require __DIR__ . '/Http/routes.php';
}
}
App/Config/app.php
'providers' => [
/*
* Laravel Framework Service Providers...
*/
IlluminateAuthAuthServiceProvider::class,
IlluminateBroadcastingBroadcastServiceProvider::class,
IlluminateBusBusServiceProvider::class,
IlluminateCacheCacheServiceProvider::class,
IlluminateFoundationProvidersConsoleSupportServiceProvider::class,
IlluminateCookieCookieServiceProvider::class,
IlluminateDatabaseDatabaseServiceProvider::class,
IlluminateEncryptionEncryptionServiceProvider::class,
IlluminateFilesystemFilesystemServiceProvider::class,
IlluminateFoundationProvidersFoundationServiceProvider::class,
IlluminateHashingHashServiceProvider::class,
IlluminateMailMailServiceProvider::class,
IlluminateNotificationsNotificationServiceProvider::class,
IlluminatePaginationPaginationServiceProvider::class,
IlluminatePipelinePipelineServiceProvider::class,
IlluminateQueueQueueServiceProvider::class,
IlluminateRedisRedisServiceProvider::class,
IlluminateAuthPasswordsPasswordResetServiceProvider::class,
IlluminateSessionSessionServiceProvider::class,
IlluminateTranslationTranslationServiceProvider::class,
IlluminateValidationValidationServiceProvider::class,
IlluminateViewViewServiceProvider::class,
BeansoftPractitionerIMSPractitionerIMSServiceProvider::class,
/*
* Package Service Providers...
*/
//
YabLaracogsLaracogsProvider::class,
/*
* Application Service Providers...
*/
AppProvidersAppServiceProvider::class,
AppProvidersAuthServiceProvider::class,
// AppProvidersBroadcastServiceProvider::class,
AppProvidersEventServiceProvider::class,
AppProvidersRouteServiceProvider::class,
],
Вывод маршрута php artisan
Ответ №1:
В Laravel 5.3, используя группу промежуточного программного обеспечения «web», промежуточное программное обеспечение сеанса добавляется к маршруту, и аутентификация работает для меня.
Route::group(['middleware' => ['web','admin']], function () {
Route::get('/admin/somepage', 'MyPackageSomeController@somepage');
});
Ответ №2:
Из документов Laravel 5.3:
Чтобы определить маршруты для вашего пакета, просто запросите файл routes из метода загрузки вашего поставщика услуг пакетов. Из вашего файла маршрутов вы можете использовать фасад IlluminateSupport FacadesRoute для регистрации маршрутов, как в обычном приложении Laravel:
Ваша проблема в том, что ваш routes.php файл из вашего пакета не включен в ваш проект. Для достижения этой цели вы должны поместить следующий код в ServiceProvider вашего пакета:
public function boot()
{
if (! $this->app->routesAreCached()) {
// customize this reference according to your package structure
require __DIR__.'/../../routes.php';
}
}
Подробнее об этом читайте в документации.
Обновление Попробуйте сделать свой маршрут следующим образом (используя group):
Route::group(['middleware' => 'auth'], function() {
Route::get('member/list', function() {
return 'member lists here';
});
});
Комментарии:
1. Спасибо, Ян, за ваш ответ. Я действительно ценю это.
2. Привет, Ян, я только что обновил вопрос, чтобы показать, что routes.php файл был опубликован по мере необходимости. Маршрутизация хорошо работает из пакета, проблема возникает, когда я ввожу промежуточное программное обеспечение аутентификации для принудительной проверки подлинности для маршрутов пакетов.
3. Можете ли вы опубликовать свою конфигурацию «провайдеров» из своего app/config/app.php ?
4. Привет, Ян, я добавил конфигурацию «провайдеры». спасибо за ваш постоянный интерес. Я очень ценю это.
5. Привет, Ян, я попробовал групповой подход, как вы указали, он по-прежнему перенаправляет на панель мониторинга.