Я использую Laravel Passport для аутентификации, поэтому я помещаю свои маршруты в защиту промежуточного программного обеспечения.
ОБНОВЛЕНО
Чтобы было понятно, я добавляю UsersController тоже.
public function getUser()
{
$users = Auth::user();
return response()->json($users);
}
//
Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function () {
/* users */
Route::get('/users', 'Api\[email protected]');
/* fetch */
Route::get('/articles', 'Api\[email protected]');
Route::get('/article/{id}', 'Api\[email protected]');
});
Конечно, мне нужно войти в систему, или я не вижу защищенные маршруты. Я сделал AuthController
и внутри него функцию входа в систему контроллера.
контроллер
public function login(Request $request)
{
$http = new \GuzzleHttp\Client;
try {
$response = $http->post(config('services.passport.login_endpoint'), [
'form_params' => [
'grant_type' => 'password',
'client_id' => config('services.passport.client_id'),
'client_secret' => config('services.passport.client_secret'),
'username' => $request->email,
'password' => $request->password,
]
]);
return $response->getBody();
} catch (\GuzzleHttp\Exception\BadResponseException $e) {
if ($e->getCode() === 400) {
return response()->json('Invalid Request. Please enter a username or a password.', $e->getCode());
}
if ($e->getCode() === 401) {
return response()->json('Your credentials are incorrect. Please try again', $e->getCode());
}
return response()->json('Something went wrong on the server.', $e->getCode());
}
}
В интерфейсе моего vuex у меня есть призыв к действию.
retrieveToken(context, credentials){
return new Promise((resolve, reject) => {
axios.post("api/v1/login", {
email: credentials.username,
password: credentials.password,
})
.then(response => {
const token = response.data.access_token;
localStorage.setItem("access_token", token);
context.commit("retrieveToken", token);
resolve(resolve);
})
.catch(error => {
console.log(error);
reject(response);
})
})
},
Все отлично. Я храню токен и использую его для входа в систему и удаляю его для выхода из системы. Но на сервере чего-то не хватает. Потому что, даже если войти, я все еще не вижу защищенные маршруты. Laravel Auth не знает, что пользователь вошел в систему.
Где мне поставить токен в шапку? Внутри контроллера или метода входа? Или мне нужно сделать что-то еще?