#laravel
#laravel
Вопрос:
Версия Laravel 8.19.0.
Я играю со свежей установкой Laravel, чтобы протестировать Sanctum, и я настроил несколько маршрутов в своем routes/api.php файл:
Route::prefix('v1')->group(function() {
Route::middleware('auth:sanctum')->get('/users', 'AppHttpControllersUsersController@index');
Route::middleware('auth:sanctum')->get('/users/{id}', 'AppHttpControllersUsersController@fetch');
Route::middleware('auth:sanctum')->put('/users/{user}', 'AppHttpControllersUsersController@update');
Route::middleware('auth:sanctum')->delete('/users/{user}', 'AppHttpControllersUsersController@destroy');
});
Кроме того, я изменил RouteServiceProvider, чтобы эти маршруты api работали через поддомен «api»:
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::domain(env('API_DOMAIN'))
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
});
}
Из файла .env:
API_DOMAIN=http://api.laravel-sanctum.com
Во время тестирования моих маршрутов я заметил, что могу получить доступ к действиям из своих маршрутов api, даже когда я пытаюсь выполнить их из веб-доменов (которые используют поддомен «test»).
Например: Laravel выполнит индексное действие в UsersController, когда я попытаюсь получить доступ к обоим api.laravel-sanctum.com/v1/users И test.laravel-sanctum.com/v1/users .
Может кто-нибудь просветить меня относительно того, почему это происходит и как я могу предотвратить test.laravel-sanctum.com/users URL-адрес для выполнения индексного действия в UsersController?
С удовольствием предоставлю любую дополнительную информацию, если потребуется.
Спасибо.
Ответ №1:
Оказывается, причина, по которой это происходило, заключалась в том, что env('API_DOMAIN')
возвращал null в RouteServiceProvider, как я запускал php artisan config:cache
в какой-то момент. При запуске php artisan config:clear
переменная env правильно вернула домен api, и маршруты работали так, как предполагалось.
Для всех, кто еще просматривает это, стоит отметить, что с тех пор я также узнал, что Laravel рекомендует использовать переменные env только в файлах конфигурации и ссылаться на файлы конфигурации вне этого в вашем приложении. Т.Е. Рекомендуется использовать env('API_DOMAIN')
в файле конфигурации и ссылаться на указанную переменную конфигурациивместо этого в RouteServiceProvider.