npm install mongoose body-parser bcrypt
db.js
models.js
routes.js
index.js
const mongoose= require("mongoose");
async function connectToDatabase(){
try {
await mongoose.connect("mongodb://127.0.0.1:27017/mydb",{
useNewUrlParser: true,
useUnifiedTopology: true,
});
console.log("connected");
} catch (error) {
console.error("Connection Failed");
}
}
module.exports = connectToDatabase;
const mongoose = require("mongoose");
const userSchema = new mongoose.Schema({
username:{
type:String,
required:true,
unique:true,
},
email:{
type:String,
unique:true,
required:true,
},
password:{
type:String,required:true
},
mobile:{
type:String,required:false
},
pic:{
type:String,required:false
},
});
const User = mongoose.model("User",userSchema);
module.exports = {User};
const express = require("express");
const router = express.Router();
const {User} =require("./models");
const bodyParser = require("body-parser");
const bcrypt = require('bcrypt');
router.use(bodyParser.json());
module.exports = router;
const express = require("express");
require('dotenv').config();
const userUrouter = require('./routes');
const connectToDatabase = require("./db");
connectToDatabase();
const app = express();
app.use('/',userUrouter);
app.get('/', (req, res) => {
res.send("Hello");
});
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`SERVER STARTED with ${port}`);
});
Registration
router.post('/register',async (req,res)=>{
try {
const {username,email,password }= req.body;
const hashPassword = await bcrypt.hash(password,10);
const user = new User({username,email,password:hashPassword});
await user.save();
res.status(201).json("User Created");
} catch (error) {
res.status(400).json({"error":"fail to create user "})
}
});
Login
npm install jsonwebtoken dotenv
const jwt = require('jsonwebtoken');
require("dotenv").config();
// Login
router.post('/login',async (req,res)=>{
try {
const {email,password} = req.body;
// Find the user by email
const user = await User.findOne({email});
if (!user) {
res.status(404).json({"error":"User Not Found"});
}
// Verify the password
const isPasswordValid = await bcrypt.compare(password,user.password);
if (!isPasswordValid) {
res.status(401).json({"error":"password not valid"});
}
// Generate a JWT token
const token = jwt.sign({userId : user._id},process.env.JWT_SECRET);
res.status(200).json({token});
} catch (error) {
res.status(400).json({"error":"Login Failed"});
}
});
Middleware
middleware.js
const jwt = require('jsonwebtoken');
const { User } = require('./models');
const checkAuthMiddleware = (req, res, next) => {
const authorizationHeader = req.headers['authorization'];
if (!authorizationHeader) {
return res.status(401).json({ message: 'Unauthorized' });
}
const token = authorizationHeader.split(' ')[1];
try {
const decodedToken = jwt.verify(token, process.env.JWT_SECRET);
id = decodedToken.id;
const user = User.findById(id);
req.user = user;
next();
} catch (error) {
return res.status(401).json({ message: 'Invalid token' });
}
};
module.exports = {
checkAuthMiddleware,
};
User Profile Update
routes.js
const {checkAuthMiddleware} = require("./middleware");
router.put('/profile',checkAuthMiddleware,async (req,res)=>{
try {
// Access the authenticated user's information using req.user
const userId = req.user;
//access the data to update
const {mobile} = req.body;
// finduser by id
const user = await User.findById(userId);
if (!user) {
res.status(404).json({error:"User Not Found"});
}
user.mobile= mobile;
await user.save();
res.status(200).json({ message: 'Profile updated successfully' });
} catch (error) {
res.status(500).json({ error: 'Profile update failed' });
}
});
মিডল ওয়ারে ডেটা পাঠানোর জন্য হেডার এ ডেটা পাঠাতে হবে টোকেন কে তাছাড়া টোকেন not ফাউন্ড দেখাবে
