Você está na página 1de 2

Autenticacao usuario - noSQL

npm install express mongoose bcrypt jsonwebtoken

const express = require('express');


const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');

const app = express();


app.use(express.json());

// Conectar ao banco de dados MongoDB (você precisa ter um servidor MongoDB em


execução)
mongoose.connect('mongodb://localhost:27017/auth_example', { useNewUrlParser: true,
useUnifiedTopology: true })
.then(() => console.log('Conexão com o MongoDB estabelecida'))
.catch(error => console.error('Erro ao conectar ao MongoDB:', error));

// Definir o modelo de usuário


const User = mongoose.model('User', new mongoose.Schema({
username: String,
password: String
}));

// Middleware de autenticação
const authMiddleware = async (req, res, next) => {
const token = req.header('Authorization');

if (!token) {
return res.status(401).send('Acesso não autorizado.');
}

try {
const decoded = jwt.verify(token, 'chave-secreta'); // Use uma chave
secreta mais segura em um ambiente de produção
const user = await User.findById(decoded.userId);

if (!user) {
return res.status(401).send('Usuário não encontrado.');
}

req.user = user;
next();
} catch (error) {
return res.status(401).send('Token inválido.');
}
};

// Rota de registro de usuário


app.post('/register', async (req, res) => {
const { username, password } = req.body;

const hashedPassword = await bcrypt.hash(password, 10);

const user = new User({


username,
password: hashedPassword
});

await user.save();

res.status(201).send('Usuário registrado com sucesso.');


});

// Rota de login
app.post('/login', async (req, res) => {
const { username, password } = req.body;

const user = await User.findOne({ username });

if (!user || !await bcrypt.compare(password, user.password)) {


return res.status(401).send('Credenciais inválidas.');
}

const token = jwt.sign({ userId: user._id }, 'chave-secreta', { expiresIn: '1h'


});

res.send({ token });


});

// Rota protegida
app.get('/restrito', authMiddleware, (req, res) => {
res.send(`Bem-vindo, ${req.user.username}! Você está em uma rota restrita.`);
});

app.listen(3000, () => {
console.log('Servidor rodando na porta 3000');
});

Você também pode gostar