Обновление с исправлением для людей с такой же проблемой:
Я наконец-то получил авторизацию токена для работы.Я полагаю, что проблема могла заключаться в том, что в моем UserController.php я поместил
$this->middleware('auth);
в свой метод __construct.Я не создавал оригинальное приложение Laravel, но я полагаю, что это промежуточное программное обеспечение происходит оттуда, поскольку для входа в систему требовалось создать файл cookie сеанса.
Теперь мой код, размещенный ниже, работает отлично!
Исходное сообщение
Как вы могли видеть в моей истории сообщений, эта проблема былачто-то давало мне покоя, и я чувствую, что уже все перепробовал, и вот я снова.Проблема:
Я настроил свой сервер авторизации, используя laravel-passport, подключаясь к серверу 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' просто следит за тем, чтобы он не считывал аргумент config в качестве аргумента 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: 'myemail@email.com', password: 'myPassword'});
const accessToken = accessTokenData.data.success.token;