Получить имя пользователя из jwt-токена с помощью fastify
Я могу создать токен JWT:
fastify.post('/signup', (req, reply) => {
const token = fastify.jwt.sign({
payload,
})
reply.send({ token })
})
это может вернуть что-то вроде:
{ "Маркер":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1MjM3MDgyMzF9.HZqqiL7wwPaEQihUGoF7Y42Ia67HgKJ-1Ms38Nvcsmw"}
но если я попытаюсь расшифровать имя пользователя из токена
fastify.get('/decode', async (request, reply) => {
const auth = request.headers.authorization;
const token = auth.split(' ')[1]
fastify.jwt.verify(token, (err, decoded) => {
if (err) fastify.log.error(err)
fastify.log.info('username : ' + decoded.username)
reply.send({
foo: decoded,
})
})
})
ответ:
{ "Foo":{"IAT":1523660987}}
0 ответов
Это рабочий пример для ваших нужд. Обратите внимание на то, что вы подписываете:
const fastify = require('fastify')({ logger: true })
const fastifyJwt = require('fastify-jwt')
async function customJwtAuth(fastify, opts) {
fastify.register(fastifyJwt, { secret: 'asecretthatsverylongandimportedfromanenvfile' })
fastify.get('/signup', (req, reply) => {
const token = fastify.jwt.sign({ username: 'John Doo', hello: 'world' })
reply.send({ token })
})
fastify.get('/decode', async (request, reply) => {
const auth = request.headers.authorization;
const token = auth.split(' ')[1]
fastify.jwt.verify(token, (err, decoded) => {
if (err) fastify.log.error(err)
fastify.log.info('username : ' + decoded.username)
reply.send({ foo: decoded })
})
})
}
fastify.register(customJwtAuth)
fastify.listen(3000)
curl http://localhost:3000/signup
{ "Маркер":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IkpvaG4gRG9vIiwiaGVsbG8iOiJ3b3JsZCIsImlhdCI6MTU0OTg2ODk3MX0.T8kv8jbyp-3ianO8-CsfxZ5gePZG9PSjY8NvhdNV7uM"}
завиток ' HTTP: // локальный: 3000 / декодировании' -H 'Разрешение: Знаменосец eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IkpvaG4gRG9v IiwiaGVsbG8iOiJ3b3JsZCIsImlhdCI6MTU0OTg2ODk3MX0.T8kv8jbyp-3ianO8-CsfxZ5gePZG9PSjY8NvhdNV7uM'
{"foo": {"username": "John Doo", "hello": "world", "iat": 1549868971}}