Embora haja uma explicação. Na transcrição há erros e é interessante ter o projeto para uma posterior consulta.
Desde já grato.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Embora haja uma explicação. Na transcrição há erros e é interessante ter o projeto para uma posterior consulta.
Desde já grato.
Oi Gabriel, tudo bem?
Desculpe a demora em retornar. Você pode acessar aqui e ver o arquivo refresh.js.
Mas também irei colar aqui:
import { db } from '../../db';
import { authService } from '../../src/services/authService';
const controllers = {
async refreshTokens(req, res) {
const { refresh_token } = req.body;
try {
const { sub } = await authService.validateRefreshToken(refresh_token);
db.users.findOne({ _id: sub, refresh_token }, async function (err, user) {
if (err) return res.status(500).json({ error: { status: 500, message: 'Internal server error', } });
if(!user?._id) {
return res.status(401).json({
error: {
status: 401,
message: 'Invalid refresh token, please login again.',
}
});
}
const tokens = {
access_token: await authService.generateAccessToken(sub),
refresh_token: await authService.generateRefreshToken(sub),
};
db.users.update({ _id: sub }, { $set: { refresh_token: tokens.refresh_token } }, function (err) {
if (err) throw new Error('Not avaiable to set refresh token');
return res.status(200).json({
data: tokens,
});
});
});
} catch (err) {
return res.status(401).json({
error: {
status: 401,
message: 'Invalid refresh token, please login again.',
}
});
}
},
}
const controllerBy = {
POST: controllers.refreshTokens,
}
/**
* @swagger
* /api/refresh:
* post:
* summary: Regenerate the user tokens
* requestBody:
* content:
* application/json:
* schema:
* properties:
* refresh_token:
* type: string
* default: omariosouto
* description: You have to login first to get a refresh token
* responses:
* 200:
* description: You refresh token is valid, you can refresh it.
* 401:
* description: You are not authorized, refresh token invalid
*/
export default function handle(req, res) {
if (controllerBy[req.method]) return controllerBy[req.method](req, res);
res.status(404).json({
status: 404,
message: 'Not Found'
});
}Um abraço e bons estudos.