JWT Avec Authentification User With Nodejs: On Commence Par Installer Le Module Jsonwebtoken

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

JWT avec authentification USER with NodeJS

On commence par installer le module jsonwebtoken

npm install jsonwebtoken

Créer le model de User dans le dossier models

models/user.js
import mongoose from "mongoose"
var userSchema = mongoose.Schema({
    nom:{
        type:String,
        required:"nom is required"
    } ,
   
    email:{
        type:String,
        required:"Email is required",
        unique:true
    } ,
    password:{
        type:String,
        required:"password is required"
    } ,
   
});
const User=mongoose.model('User',userSchema)
    export default User

Routes/user.route.js

import express from 'express';

import {  createUser,getuserBYEmail} from '../controllers/users.js';

const router = express.Router();

router.post('/', createUser);

// localhost:3001/api/users/login

router.post('/login', getuserBYEmail);

export default router;

1
Fichier Controllers/user.js

import User from '../models/user.js';


import  jwt  from "jsonwebtoken"

export const createUser = async (req, res) => {


        const newUser = new User(req.body)
      try {
         await newUser.save();
 
         res.status(201).json(newUser );
     } catch (error) {
         res.status(409).json({ message: error.message });
     }
 }

 const generateAccessToken=(user) =>{


    return jwt.sign({user}, process.env.ACCESS_TOKEN_SECRET, { expiresIn: '30s' });

  }
 export const getuserBYEmail = async (req, res) => {
    try {
        const{email,password}=req.body;
        const user = await User.find({email,password});
       if(user==""){  res.status(401).send('utilisateur non existant');
        return} ;
        const accessToken = generateAccessToken(user);
       res.status(200).json({
        accessToken
      })
    } catch (error) {
        res.status(404).json({ message: error.message });
    }
}

 
9- Créer middlewares/auth.js le fichier qui vérifiera qu’on détient le jeton.

middlewares/auth.js

import  jwt  from "jsonwebtoken"

export const auth=async(req,res,next)=>{


const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
  if (!token) {
    return res.sendStatus(401);

2
  }
  jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {
    if (err) {
      return res.sendStatus(401);
    }
    req.user = user;
    next();
  });
 }

Fichier .env

npm install dotenv

ACCESS_TOKEN_SECRET=azerty

Dans le fichier app.js, on ajoute la nouvelle route pour user

import userRouter from "./routes/user.route.js"

app.use('/api/users', userRouter);

dans le fichier article.route.js ; si on veut afficher la liste des articles mais avec JWT ont doit importer le
module auth

import express from 'express';


import {auth} from "../middleware/auth.js"
import { getArticles, getArticleByID, createArticle, updateArticle, deleteArticle }
from '../controllers/articles.js';

const router = express.Router();


/**
 * @route   GET /api/articles
 * @desc    Get All articles
 * @access  Public
 */
router.get('/',auth, getArticles);

3
Après 30 secondes, le token ne sera plus valable

You might also like