Итак, я создаю веб-приложение со стороны сервера (узел + express) и клиента (cra). У меня проблема с проверкой пользователя по токену jwt, который я установил как повар ie. Конечная точка API проверки на стороне сервера работает должным образом (протестировано с почтальоном), но проблема в том, что asyn c функция проверки, которая возвращает обещание, поэтому маршрут на самом деле не знает, проверен ли он, поскольку ответ находится на рассмотрении.
Вот конечная точка API на стороне сервера: /api/token.js
router.get('/',
jwt({secret:'token-secret' }),
function (req,res) {
console.log(req);
if(!req.user) return res.sendStatus(401);
res.sendStatus(200);
}
)
, а вот приложение. js на стороне клиента: src / app. js, который обрабатывает маршрутизацию (/ панель мониторинга должна быть доступна только для проверенных пользователей)
function App() {
function checkToken() {
let token = Cookies.get('Access Token')
axios.get('http://localhost:9000/api/token', {
headers: {
'Authorization': `bearer ${token}`
}
}).then(res => {
return res.status;
}).catch(err => console.log(err));
}
const handleToken = async () => {
const result = await checkToken();
return result;
}
return (
<BrowserRouter>
<Route exact={true} path='/' render={() => (
<div className="App">
<Home />
</div>
)}/>
<Route exact={true} path='/dashboard' render={() => (
<div className="App">
{console.log('checktoken log', handleToken())}
{checkToken() ? <Dashboard /> : <Login />}
</div>
)}/>
<Route exact={true} path='/login' render={() => (
<div className="App">
<Login />
</div>
)}/>
</BrowserRouter>
);
}
На данный момент я понимаю, что, возможно, мне не следует выполнять проверку таким образом, поскольку, вероятно, нет никакого способа Я могу получить возврат до рендеринга, возможно, это должно быть сделано в хуке жизненного цикла componentWillMount, но я не смог представить его в этом файле (или все должно быть сделано в совершенно другом файле).
Спасибо
ps Я пропустил все настройки импорта и экспорта по умолчанию, так как это не имеет значения