Я кодирую проект с помощью React Native и Laravel Passport API.
У меня есть 1 ссылка на бронирование следующим образом: domain.com/api/v1/bookings
Эту ссылку не нужно входить в систему, но я хочу, чтобы при добавлении токена в заголовок (Password Grant Tokens) сервер получал регистрационную информацию пользователя через этот токен.
Route::group(['prefix' => 'v1'], function () {
Route::resource('bookings', 'BookingController')->parameters([
'{module}' => 'id'
])->only(['store','show']);
});
У меня есть два решения:
Решение 1: создать два маршрута с аутентификацией и без аутентификации. => но я не чувствую себя профессионалом: D
Route::group(['prefix' => 'v1'], function () {
Route::resource('bookings', 'BookingController')->parameters([
'{module}' => 'id'
])->only(['store','show']);
});
Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function () {
Route::resource('bookingsAuth', 'BookingController')->parameters([
'{module}' => 'id'
])->only(['store','show']);
});
Решение 2: Пользовательские «Клиентские учетные данные» без имени пользователя, пароля и «Парольные учетные токены» для Auth. => Но я не уверен, что это лучшее решение.
Route::group(['prefix' => 'v1', 'middleware' => ['client','auth:api']], function () {
Route::resource('bookings', 'BookingController')->parameters([
'{module}' => 'id'
])->only(['store','show']);
});
Решение 2, я пытался, но не работал с клиентом токена: {"message": "Не аутентифицирован."}
ОБНОВЛЕНИЕ: Временное решение, установите промежуточное ПО на функцию __construct контроллера
class BookingController extends Controller
{
public function __construct(Request $request) {
//***Check exist token***
if ($request->bearerToken()) {
$this->middleware( 'auth:api' );
}
}
}