Как создать API с аутентификацией(Laravel)

126
04 мая 2021, 05:20

У меня простая задача - сделать APi который возвращает json ответ с данными. Это я сделал с помощью Resource, который вызываю обычным --resource контроллером в методе index. Данные приходят...
Роутинг у меня через api.php Вопрос в том, как сюда добавить аутентификацию? Когда я захожу под пользователем то api его не видит. Я много рыл инет и уже потеряв надежду понять это - пишу к вам. Кто может помочь с этим?

После коментариев.... пробую сделать как в документации:

api.php:

Route::resource('users', 'UserController')->middleware('auth:api');

config/auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
],

Метод контроллера, где я вызываю Resource, который отправляет json-данные

 public function index(Request $request)
{
    $user = User::with(['posts' => function ($q) {
        $q->orderBy('created_at', 'desc');
    }])->find($request->get('id'));
    return new UserResource($user);
}

Даже файл ресурса сюда кину:

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->first_name . ' ' . $this->second_name,
        'postCount' => count($this->posts),
        'lastPostTitle' => $this->posts[0]->title,
        'lastPostImageSrc' => $this->posts[0]->getImage()
    ];
}

Вот и почему залогиненого пользователя с api_token редиректит во время запроса: http://site/api/users?id=2 Как оно работает ??)))

Answer 1

В документации подробно описано: https://laravel.com/docs/5.8/api-authentication

Добавляете в миграции таблицы users:

 $table->string('api_token', 80)->after('password')
                            ->unique()
                            ->nullable()
                            ->default(null)

Далее рефрешите базу данных:

php artisan migrate:refresh

Создаете пользователя. Присваиваете вашему пользователю api_token, можете хэшировать, можете нет - без разницы, сложность и обновление токена - уровень логики вашего приложения. Для примера возьмем api_token=1111.

Смотрим дефолтный роут в api.php:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Чтобы получить доступ к этому роуту нужно перейти по адресу:

domen/api/user?api_token=1111
READ ALSO
PHP Проблема с кодировкой

PHP Проблема с кодировкой

API работает во всех браузерах нормально, кроме IE 11Есть метод, который принимает данные через $_REQUEST

122
Зачем нужный пустые квадратные скобки в имени инпута

Зачем нужный пустые квадратные скобки в имени инпута

Всем привет возможно вопрос кому то покажется глупым тк

86
Где граница бизнес-логики в контроллере?

Где граница бизнес-логики в контроллере?

Разъясните, пожалуйста, что является бизнес логикой приложения и где ее границы с контроллером? Какой вариант более правильный и почему:...

118
Получить данные из `$_SERVER` без спецсимволов

Получить данные из `$_SERVER` без спецсимволов

В адресной строке: /computerzubehör-/, но через $_SERVER['REQUEST_URI'] получаем /computerzubeh%C3%B6r-/Как получить строку как есть, без замены спецсимволами?

119