Я работаю с 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 по умолчанию, который можно использовать для передачи токена доступа к требуемым запросам, или как это можно сделать?






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() для получения пользователя.
Какой язык вы используете в своем мобильном приложении?
например, вы используете конечную точку http://example.com/api/tasks, и она защищена токеном доступа.
Вы делаете запрос с заголовком с ключом Authorization и значением Bearer $accesstoken (например, Bearer eyj3...)
это приложение для андроида. Так что будет отправлять полезную нагрузку json для использования андроидом. теперь в этой полезной нагрузке я передам токен доступа вместе с полезной нагрузкой ответа, и этот заголовок будет использоваться для аутентификации запроса. Верны ли мои рассуждения?
пример для метода get может быть что-то вроде этого HttpGet httpGet = new HttpGet('http://example.com/api/tasks'); httpGet .setHeader("Authorization", Bearer access_token");
Вы получили токен доступа из приложения laravel. 1. Вы создаете объект запроса в android. 2. Установите заголовок для этого запроса с ключом Authorization и значением Bearer "access_token"
теперь это та часть, которую я дергаю за волосы. после того, как я сгенерирую токен доступа после входа пользователя в систему, как мне передать этот токен доступа ко всем запросам, требующим аутентификации? то есть использовать токен доступа в заголовке ответа, который я отправляю через конечную точку, которая будет использоваться мобильным приложением
Давайте продолжить обсуждение в чате.
ты спасаешь жизнь.
@ahmednawazbutt рад, что смог помочь
используя метод $request->bearerToken();, вы можете получить токен запроса.
use Illuminate\Http\Request;
public function index(Request $request)
{
echo $request->bearerToken();
}
Привет. Спасибо за ваш вклад. То, что вы предлагаете здесь, требует, чтобы токен доступа уже был в заголовке. Мой вопрос: после входа в систему и создания токена доступа, как я могу использовать его для всех запросов, требующих аутентификации. Как мне на самом деле передать токен доступа в любом аутентифицированном запросе к моему заголовку?