Laravel Passport — передача токена доступа к запросам

Я работаю с Laravel Passport впервые. Я создаю API, который будет использоваться мобильным приложением.

Для аутентификации я делаю следующее:

public function login(Request $request)
{ 
    $loginData = Validator::make($request->all(), [
        'email' => 'required|email',
        'password' => 'required',
    ]);

    if ( $loginData->fails() )
    {
        return response()->json(['error' => $loginData->errors()], 401);
    }

    if ( Auth::attempt(['email' => request('email'), 'password' => request('password')]) )
    { 
        $data = [
            'grant_type' => 'password',
            'client_id' => $this->client->id,
            'client_secret' => $this->client->secret,
            'username' => $request->email,
            'password' => $request->password,
            'scope' => '',
        ];

        $request = Request::create('/oauth/token', 'POST', $data);
        return app()->handle($request);
    } 
    else
    { 
        return response()->json(['error' => 'Invalid credentials'], 401); 
    } 
}

Успешный вход возвращает токен доступа как таковой:

{
"token_type": "Bearer",
"expires_in": 31622400,
"access_token": "access_token",
"refresh_token": "refresh_token"
}

Теперь цель состоит в том, чтобы использовать этот токен доступа, передав его в заголовок всех маршрутов, требующих аутентификации.

Например, в моем файле routes/api.php у меня есть этот маршрут:

Route::post('/login', 'API\AuthController@login');
Route::apiResource('/tasks', 'API\TaskController')->middleware('auth:api');

В моем TaskController всем методам в нем должен быть передан заголовок, содержащий токен доступа, чтобы аутентифицировать запрос. Вот где мой вопрос. Я пока не могу найти ресурс, объясняющий, как это сделать. Итак, в каждом запросе мне нужно передать что-то вроде этого в заголовок запроса:

Accept: application/json
Authorization: Bearer access_token

Это мой TaskControllerindex метод. Как мне передать токен доступа сюда?

public function index()
{
    //how do i capture the access token in here so that i can pass it to the request header?
    return TaskResource::collection(auth()->user()->tasks()->latest()->paginate(4));
}

Существует ли метод Passport по умолчанию, который можно использовать для передачи токена доступа к требуемым запросам, или как это можно сделать?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
4 420
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
use Illuminate\Http\Request;
public function index(Request $request)
{
       $bearerToken = $request->header('Authorization'); // will return "Bearer access_token" string
}

Затем вам нужно будет получить access_token из строки "Bearer access_token". Если вам нужно access_token для получения пользователя, вы можете использовать $user = $request->user() для получения пользователя.

Привет. Спасибо за ваш вклад. То, что вы предлагаете здесь, требует, чтобы токен доступа уже был в заголовке. Мой вопрос: после входа в систему и создания токена доступа, как я могу использовать его для всех запросов, требующих аутентификации. Как мне на самом деле передать токен доступа в любом аутентифицированном запросе к моему заголовку?

suo 14.05.2019 14:42

Какой язык вы используете в своем мобильном приложении?

ata 14.05.2019 14:50

например, вы используете конечную точку http://example.com/api/tasks, и она защищена токеном доступа.

ata 14.05.2019 14:52

Вы делаете запрос с заголовком с ключом Authorization и значением Bearer $accesstoken (например, Bearer eyj3...)

ata 14.05.2019 14:53

это приложение для андроида. Так что будет отправлять полезную нагрузку json для использования андроидом. теперь в этой полезной нагрузке я передам токен доступа вместе с полезной нагрузкой ответа, и этот заголовок будет использоваться для аутентификации запроса. Верны ли мои рассуждения?

suo 14.05.2019 14:56

пример для метода get может быть что-то вроде этого HttpGet httpGet = new HttpGet('http://example.com/api/tasks'); httpGet .setHeader("Authorization", Bearer access_token");

ata 14.05.2019 15:02

Вы получили токен доступа из приложения laravel. 1. Вы создаете объект запроса в android. 2. Установите заголовок для этого запроса с ключом Authorization и значением Bearer "access_token"

ata 14.05.2019 15:04

теперь это та часть, которую я дергаю за волосы. после того, как я сгенерирую токен доступа после входа пользователя в систему, как мне передать этот токен доступа ко всем запросам, требующим аутентификации? то есть использовать токен доступа в заголовке ответа, который я отправляю через конечную точку, которая будет использоваться мобильным приложением

suo 14.05.2019 15:19

Давайте продолжить обсуждение в чате.

ata 14.05.2019 15:28

ты спасаешь жизнь.

ahmednawazbutt 18.02.2021 09:42

@ahmednawazbutt рад, что смог помочь

ata 18.02.2021 15:08

используя метод $request->bearerToken();, вы можете получить токен запроса.

    use Illuminate\Http\Request;
    public function index(Request $request)
    {
           echo $request->bearerToken();
    }

Другие вопросы по теме