40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
const express = require("express");
|
|
const router = express.Router();
|
|
const bcrypt = require("bcryptjs");
|
|
const jwt = require("jsonwebtoken");
|
|
const db = require("../db");
|
|
|
|
// Register
|
|
router.post("/register", (req, res) => {
|
|
const { nama, email, password } = req.body;
|
|
const hashedPassword = bcrypt.hashSync(password, 8);
|
|
|
|
db.query(
|
|
"INSERT INTO users (nama, email, password) VALUES (?, ?, ?)",
|
|
[nama, email, hashedPassword],
|
|
(err, result) => {
|
|
if (err) return res.status(500).json(err);
|
|
res.json({ message: "User registered!" });
|
|
}
|
|
);
|
|
});
|
|
|
|
// Login
|
|
router.post("/login", (req, res) => {
|
|
const { email, password } = req.body;
|
|
|
|
db.query("SELECT * FROM users WHERE email = ?", [email], (err, result) => {
|
|
if (err) return res.status(500).json(err);
|
|
if (result.length === 0) return res.status(404).json({ message: "User not found" });
|
|
|
|
const user = result[0];
|
|
const valid = bcrypt.compareSync(password, user.password);
|
|
if (!valid) return res.status(401).json({ message: "Invalid password" });
|
|
|
|
const token = jwt.sign({ id: user.id, email: user.email }, "SECRET_KEY", { expiresIn: "1h" });
|
|
res.json({ message: "Login success", token, user });
|
|
});
|
|
});
|
|
|
|
module.exports = router;
|