1. Home
  2. Docs
  3. Rest Api
  4. লগইন রেজিস্ট্রেশন অথেনটিকেশন

লগইন রেজিস্ট্রেশন অথেনটিকেশন

npm install mongoose body-parser bcrypt

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 ফাউন্ড দেখাবে

How can we help?