Quando eu vou fazer a parte do login da o erro 401 e fala que o usuário ou senha estão inválidos, mas eu estou usando os usuarios padrões
Quando eu vou fazer a parte do login da o erro 401 e fala que o usuário ou senha estão inválidos, mas eu estou usando os usuarios padrões
E aí, Fernando!
Vamos tentar analisar o código para ver quais podem ser as possíveis causas deste erro, como você pode ver o front está se comunicando com o backend corretamente, então bora no backend para ver o que está retornando tal erro, se você acessar o diretório /backend/pages/api/login.js, você verá um arquivo com um código como este:
import { db } from '../../db';
const controllers = {
async login(req, res) {
const { username, password } = req.body;
// O servidor está pegando 'username' e 'password' do corpo de sua requisição
db.users.findOne({ username, password }, async function (err, user) {
if (err) res.status(500).json({ error: { status: 500, message: 'Internal Server Error' } });
if (!user) res.status(401).json({ error: { status: 401, message: 'Username or password are invalid' } });
// Após isto tenta encontrar no banco de dados algum documento que corresponde com aquele usuário e senha específicos
// E aqui temos o erro 401, que é o qual está sendo retornado para o frontend, podemos notar que não é um erro do servidor,
// este erro é retornado quando o usuário não é encontrado no banco de dados...
// ...
}
};
Tá e agora? Agora temos que verificar a estrutura do banco de dados, que se você perceber a variável db está sendo importada localmente ../../db, então vamos verificar tal diretório:
import Datastore from 'nedb';
export const db = {
users: new Datastore({ filename: './data/users.db', autoload: true }),
};
db.users.ensureIndex({ fieldName: 'username', unique: true });
Podemos notar que neste arquivo há a importação de 'nedb', mas para que serve? Então pesquisando no Google por tal pacote encontrei o seu repositório, e aparentemente ele é um mockador de dados para MongoDB, o próprio repositório diz isto:
Criando/carregando um banco de dados Você pode usar o NeDB como um armazenamento de dados apenas na memória ou como um armazenamento de dados persistente. Um armazenamento de dados é o equivalente a uma coleção do MongoDB. O construtor é usado da seguinte forma new Datastore(options) onde options é um objeto com os seguintes campos:Então para não fazer uma conexão real com um banco de dados, o Mario está simulando uma coleção MongoDB em um arquivo estático, claro que eu encontrei o arquivo sem precisar pesquisar sobre este pacote, além do mais ele já falou no curso, mas acho interessante pesquisar a respeito para saber o que está acontecendo. Agora é só seguir este filename, que é para ./data/users.db. Assim encontramos vários objetos javascript, cada um simulando um documento da coleção users:
{"username":"omariosouto","name":"Mario Souto","email":"contato@alura.com.br","password":"safepassword","refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2NDU5OTE4MDIsImV4cCI6MTY0NjU5NjYwMiwic3ViIjoiU05ZOGUyVDgwaUFpNjg3cyJ9.VYV5RecRs_n3hRTYmtrFkMxwX-R7ddwqLtr_zvlJ4E8","_id":"SNY8e2T80iAi687s"}
{"username":"peas","password":"safepassword","name":"Paulo Silveira","email":"paulo@alura.com.br","_id":"pchQDUBs1jJv8br0"}
{"$$indexCreated":{"fieldName":"username","unique":true,"sparse":false}}
{"username":"omariosouto","name":"Mario Souto","email":"contato@alura.com.br","password":"safepassword","refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2NDU5OTIwMzMsImV4cCI6MTY0NjU5NjgzMywic3ViIjoiU05ZOGUyVDgwaUFpNjg3cyJ9.I7Jh4_tg-uOa48T4yQCs7ZsDHBngl1EqBq2aoa03pcE","_id":"SNY8e2T80iAi687s"}
Tenta logar com algumas dessas credenciais, ou inserir diretamente neste arquivo novos documentos, aparentemente isto deve bastar.
Obs.: Verifique também se você está enviando os dados corretos para o servidor, coloque um console.log no controller login e antes de enviar os dados do front para poder depurar.