Нужно решение о Laravel API с аутентификацией и без аутентификации - PullRequest
0 голосов
/ 15 января 2019

Я кодирую проект с помощью 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' );
        }
    }
}
...