Talvez tenha passado despercebido, mas eu não entendi como o back end entende que a foto já foi curtida por determinado usuário, no post estamos passando apenas o 'photoId'.
Obrigado.
Talvez tenha passado despercebido, mas eu não entendi como o back end entende que a foto já foi curtida por determinado usuário, no post estamos passando apenas o 'photoId'.
Obrigado.
Fala ai Márcio, tudo bem? O id
do usuário é pego dentro do token que é enviado no cabeçalho das requisições.
No caso seria esse middleware da API:
module.exports = async (req, res, next) => {
const token = req.headers['x-access-token'];
if (token) {
try {
const decoded = await verify(token, req.app.get('secret'));
console.log(`Valid token received: ${token}`);
req.user = decoded;
next();
} catch (err) {
console.log(err);
console.log(`Invalid token: ${token}`);
return res.sendStatus(401);
}
} else {
console.log('Toke is missing!');
return res.sendStatus(401);
}
}
Repare que ele está verificando se existem o token, ou seja, se um cabeçalho com a chave x-access-token
foi enviado. Se sim, ele decodifica o token e seta dentro da requisição através de uma propriedade user
, ou seja, req.user = decoded
.
E dentro da função de like
:
api.like = async (req, res) => {
const { photoId } = req.params;
const dao = new PhotoDao(req.db);
const liked = await dao.likeById(photoId, req.user.id);
if(liked) {
console.log(`User ${req.user.name} liked photo ${photoId}`);
return res.status(201).end();
}
return res.status(304).end();
};
Ele pega o id
do usuário que foi decodificado pelo middleware através do req.user.id
.
Espero ter ajudado.
Entendi Matheus, obrigado pela explicação!
Magina Marcio, sempre que precisar não deixe de criar suas dúvidas.
Abraços e bons estudos.