๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[E-Commerce App with Fullstack] (3) Login API ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฐฑ์—”๋“œ(Back-End)/Node js

[E-Commerce App with Fullstack] (3) Login API

์ง•์ง•์•ŒํŒŒ์นด 2023. 4. 30. 22:51
728x90
๋ฐ˜์‘ํ˜•

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” Techinfo YT ์˜ ์œ ํŠœ๋ธŒ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

=> Mern stack Ecommerce App Lets Build And Deploy Mern Stack Project full-stack development

 

โ˜˜๏ธ Login API

์„œ๋ฒ„๊ฐ€ ๋กœ๊ทธ์ธ์„ ์™„๋ฃŒํ•œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐœ๊ธ‰ํ•ด์ฃผ๋Š” ๊ธด ๋ฌธ์ž์—ด

์‚ฌ์šฉ์ž์˜ ์ธ์ฆ/์ธ๊ฐ€ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ์Œ

npm install jsonwebtoken

 

๐Ÿ’š controllers/authController.js

import JWT from "jsonwebtoken";
import { comparePassword, hashPassword } from "../helpers/authHelper.js";
import User from "../models/User.js";

// POST REGISTER
export const registerController = async (req, res) => {
  try {
    const { name, email, password, phone, address } = req.body;

    // validation
    if (!name) {
      return res.send({ error: "Name is required!" });
    }
    if (!email) {
      return res.send({ error: "email is required!" });
    }
    if (!password) {
      return res.send({ error: "password is required!" });
    }
    if (!phone) {
      return res.send({ error: "phone is required!" });
    }
    if (!address) {
      return res.send({ error: "address is required!" });
    }

    // check user
    const existingUser = await User.findOne({ email });
    // existing user
    if (existingUser) {
      return res.status(200).send({
        success: true,
        message: "Already Register please login!",
      });
    }
    // register user
    const hashedPassword = await hashPassword(password);
    // save
    const user = new User({
      name,
      email,
      phone,
      address,
      password: hashedPassword,
    }).save();
    res.status(201).send({
      success: true,
      message: "User Register Successfully",
      user,
    });
  } catch (error) {
    console.log(error);
    res.status(500).send({
      success: false,
      message: "Error in Registeration",
      error,
    });
  }
};

// POST LOGIN
export const loginController = async (req, res) => {
  try {
    const { email, password } = req.body;

    // validation
    if (!email || !password) {
      return res.send({ error: "Invalid email or password" });
    }

    // check user
    const user = await User.findOne({ email });
    if (!user) {
      return res.status(200).send({
        success: true,
        message: "Email is not registered",
      });
    }
    // register user
    const match = await comparePassword(password, user.password);
    if (!match) {
      return res.status(200).send({
        success: true,
        message: "Invalid password",
      });
    }
    // token
    const token = await JWT.sign({ _id: user._id }, process.env.JWT_SECRET, {
      expiresIn: "7d",
    });
    return res.status(200).send({
      success: true,
      message: "Login successfully",
      user: {
        name: user.name,
        email: user.email,
        phone: user.phone,
        address: user.address,
      },
      token,
    });
  } catch (error) {
    console.log(error);
    res.status(500).send({
      success: false,
      message: "Error in Login",
      error,
    });
  }
};

export const testController = async (req, res) => {};

 

๐Ÿ’š routes/authRouter.js

import express from "express";

// router object
const router = express.Router();
import {
  registerController,
  loginController,
  testController,
} from "../controllers/authController.js";

// routing
// REGISTER || METHOD POST
router.post("/register", registerController);

// LOGIN || POST
router.post("/login", loginController);

// test routes
router.get("test", testController);

export default router;

728x90
๋ฐ˜์‘ํ˜•
Comments