Обновление с исправлением для людей с той же проблемой:
Наконец-то я получил авторизацию токена, чтобы работать. Я считаю, что проблема могла быть в том, что в моем UserController.php я поместил
$this->middleware('auth);
в моем методе __construct. Я не создавал оригинальное приложение Laravel, но я считаю, что это промежуточное программное обеспечение исходит оттуда, поскольку требовался логин, создающий файл cookie сеанса.
Теперь мой код, размещенный ниже, работает отлично!
Исходное сообщение
Как вы могли видеть из моей истории сообщений, эта проблема уже какое-то время меня беспокоит, и я чувствую, что уже все перепробовал, так что я снова здесь. Проблема:
Я настроил свой сервер авторизации с помощью laravel-паспорта, подключившись к серверу API. Из React SPA я вызываю сервер авторизации (используя axios, если это имеет значение), где я отправляю имя пользователя (которое является электронной почтой) и пароль, и, если он принят, возвращает токен доступа. Все это работает, и теперь я хочу отправить запрос на получение данных с помощью моего токена доступа. Это делается с помощью следующего кода:
var config = {
headers: { 'Authorization': "Bearer " + accessToken }
};
await axios.get('http://apiServer/api/details', {data: 'data'}, config)
.then(response => {
console.log('user: ', response)
})
который называет маршрут
Route::middleware('auth:api')->group(function () {
Route::get('/user', 'ApiController@getUser');
});
который вызывает функцию
public function details()
{
$user = Auth::user();
return response()->json(['success' => $user], 200);
}
Это не работает, и я получаю неавторизованное сообщение (401). Токен API выглядит правильно, и я почти уверен, что вызов axios имеет правильный синтекс (часть data: 'data' просто проверяет, не читает ли аргумент конфигурации как аргумент данных).
Я также попытался явно использовать токен предоставления пароля, используя сконструированный клиент предоставления пароля, но это дает ту же ошибку.
Единственное, что выглядит подозрительно, это то, что оба моих клиента oauth имеют значение user_id null. Я не уверен на 100% в том, как они работают, поэтому я спросил об этом здесь. Крис Келкер дал ответ, на который я надеялся, но мне не удалось его реализовать, так как я не уверен, как напрямую изменять файлы oauth в паспорте, и если я вообще должен это делать.
При необходимости я могу предоставить дополнительный код и надеюсь, что не слишком много спамлю по этой проблеме.
Заранее спасибо, Ричард.
По запросу, вот код, генерирующий токен:
public function loginToken()
{
if (Auth::attempt(['email' => request('email'), 'password' => request('password')])) {
$user = Auth::user();
$success['token'] = $user->createToken('MyApp')->accessToken;
return response()->json(['success' => $success], 200);
} else {
return response()->json(['error' => 'Unauthorised'], 401);
}
}
Код для получения токена в моем приложении реакции:
const accessTokenData = await axios.post('http://my-app/api/loginToken', {email: '[email protected]', password: 'myPassword'});
const accessToken = accessTokenData.data.success.token;