#javascript #express #jwt
#javascript #экспресс #jwt
Вопрос:
Здравствуйте, могу ли я помочь с этим, кажется, я не могу понять, почему я всегда получал ошибку TokenExpiredError: jwt expired
, я только что создал токен.
Вот что я хотел сделать.
1.) когда пользователь вошел в систему, ответ содержит accessToken и refreshToken
2.) вызывайте auth / token каждые 30 секунд для создания нового accessToken.
api аутентификации / токена примет refresh_token в качестве данных запроса и accessToken в качестве авторизации на предъявителя, однако я всегда получал jwt expired
. Сбой промежуточного программного обеспечения аутентификации.
Однако, когда я использовал accessToken, который я получил от logged in api, я получил jwt expired
ошибку.
JWT Service
sign(payload, expiresIn = '15m') {
return jwt.sign(payload, this.privateKey, {
algorithm: 'RS256',
expiresIn,
});
}
verify(token) {
return jwt.verify(token, this.publicKey, { algorithms: ['RS256'] });
}
Controller.js
// login api
login(req, res, next) {
const { body: { email, password } } = req;
this.accountService.findByEmail(email)
.then(async (data) => {
const accessToken = this.jwtService.sign({ data}, '2m');
const refreshToken = this.jwtService.sign({ data}, '1h');
return res.send(new SuccessResponse(200, {accessToken, refreshToken}));
})
.catch((error) => {
next(error);
});
}
}
// auth/token api
authToken(req, res, next) {
const { body: { refresh_token } }= req;
const payload = { refresh_token };
const newAccessToken = this.jwtService.sign({ payload }, '1m', 'RS256');
}
authenticate.middleware.js
export const authenticate = (req, res, next) => {
const authorizationBearer = req.get('authorization');
const accessToken = authorizationBearer.replace('Bearer ', '');
const decodedData = jwtService.verify(accessToken);
if (decodedData) {
next();
}
}
Я что-то пропустил или сделал что-то не так?
Используемая библиотека:
jsonwebtoken: 8.5.1
express: 4.17.1
Комментарии:
1. как выглядит фактический токен?
2. @jps что-то вроде этого
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbXBEYXRhIjp7ImVtYWlsIjoiYWRtaW5AZ21haWwuY29tIiwiYWNjb3VudF9pZCI6IjVmNTBjMTIwNDhlZmIxMDZlOTk5ZThlNSJ9LCJpYXQiOjE1OTkzMDcyNzIsImV4cCI6MTU5OTMwNzU3Mn0.r09RrfUjjJCm3ZyZ71xuN9U8o-1xR4s_Kt_ir6OQ6CkBuewPJiExiN_MgnFuTIf74M_r6q4auzpErE6hWfJL49UCNPX_zb9cN8DafaCmScfxz1JIGtBoD22sCcs7id8Td1rsLt3VBfP65OCdkkukXHNg0ccvrhO-VdbjFGmUhNYnudrHdCEpz59_3HkXjklQqn8Yh--fYX2Ds0pSUy8yfs3knBJIz4GD4wLoyP9bwxVaqo-IVLX-sEtzQUv3J_9wT7YlYdZGPoVxWSJwmxXMLP42ILKuh_9x1Ekpa7t54wQ6cqxkq6tjp6d7g0TNlaigoXc2dDCJ_wArDOZPcHvuxg
3. Формат правильный, поэтому я не знаю, почему я всегда получаю ошибку Jwt с истекшим сроком действия
4. хорошо, exp и iat выглядят нормально.
5. да, я уже несколько часов здесь, но я все еще не мог понять, чего мне не хватает.