У меня есть простой API в Laravel. Файл маршрутов выглядит так:
<?php
Route::resource('airports', 'AirportController');
Route::resource('flights', 'FlightController');
Route::resource('reservations', 'ReservationController');
Route::get('auth', 'AuthController@index');
Route::post('auth', 'AuthController@store');
Route::delete('auth', 'AuthController@destroy');
Файл фильтра имеет собственный фильтр, добавленный так:
Route::filter('auth_token', function()
{
$auth_token = Request::header('Authorization');
if(!AuthToken::where('auth_token', '=', $auth_token)->first()){
return Response::json([], 401);
}
});
Все ресурсы должны пройти до auth_token
фильтр. Теперь это прекрасно работает на моей локальной машине, но как только я попробую это на моем сервере, все будет неавторизовано, даже если я передам действительный токен. Проблема, которую я понял dd($auth_token)
в моем настраиваемом фильтре он возвращает ноль, что означает, что мой сервер по какой-то причине не принимает заголовок.
Мой файл .htaccess выглядит так:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
Header set Access-Control-Allow-Origin "*"Header set Access-Control-Allow-Headers "*"</IfModule>
Я использую REST-клиент Postman для тестирования моего приложения. В системе есть только один пользователь с адресом электронной почты [email protected] и паролем admin12345. Вы можете POST
эти детали к /auth
маршрутизировать и получить предоставленный токен доступа, который затем можно использовать для получения других ресурсов в системе.
Приложение размещено Вот. Что я делаю неправильно?
Порядок маршрутов может быть проблемой. попробуйте перевернуть как это и посмотреть, работает ли это …
Route::get('auth', 'AuthController@index');
Route::post('auth', 'AuthController@store');
Route::delete('auth', 'AuthController@destroy');
Route::resource('airports', 'AirportController');
Route::resource('flights', 'FlightController');
Route::resource('reservations', 'ReservationController');
Других решений пока нет …