简体   繁体   中英

password comparison with bcrypt not working

i'm fairly new to express js i want to do a login app so far i did the register part but in login app i want to do the comparaison between the password in database and the password provided by the user and compare it with bcrypt since i'm using it to crypt password, but its not doing the comparaison, what i'm missing here

router

const express = require('express')
const router = express.Router()
const bcrypt = require('bcrypt');
const User = require('../models/user')
const jwt = require('jsonwebtoken')
router.get('/login', function (req, res) {
    res.render('login')
  })
 router.get('/', function (req, res) {
    res.render('home')
  })
  router.get('/register', function (req, res) {
    res.render('register')
  })

  router.post('/register', async function(req,res){
    User.beforeCreate((user, options) => {

        return bcrypt.hash(user.password, 10)
            .then(hash => {
                user.password = hash;
            })
            .catch(err => { 
                throw new Error(); 
            });
    });
    return User.create({
        username: req.body.name,
        password: req.body.password,
        email: req.body.email,
        createdAt: Date.now()
    }).then(function (users) {

            res.send(users);

    }).catch((err)=>{
console.log(err)
    })
  })

  router.post('/login',  function(req,res){

   User.findOne({
       where:{
            username:req.body.name
       }
   })
   .then(user=>{
       if(user){
           if(bcrypt.compareSync(req.body.password,user.password)){
                let token = jwt.sign(user.dataValues,secretKey,{
                    expiresIn:1440
                })
            res.send(token)
        }
           else {
               res.status(400).json({
                   error:'error exissts'
               })
           }

       }
   })
   .catch(err=>{
       res.status(400).json({err:err})
   })
  })
 module.exports = router

models

const sequelize = require('../database/db.js')
const Sequelize = require('sequelize');
const User = sequelize.define('authentication',{
 username: {
    type: Sequelize.STRING,
    allowNull: false
  },
  password: {
    type: Sequelize.STRING
    // allowNull defaults to true
  }  ,
  email: {
    type: Sequelize.STRING
    // allowNull defaults to true
  },   
  created_at: {
    field: 'createdAt',
    type: Sequelize.DATE,
},
updated_at: {
  field: 'updatedAt',
  type: Sequelize.DATE,
},
}, {
  freezeTableName: true
},
{
  notNull: { args: true, msg: "You must enter a name" }
},


)
module.exports = User

index

const express = require('express');
const exphbs = require('express-handlebars');
const bodyParser = require('body-parser');
const path = require('path');
// const passport = require('passport');
// const passportJWT = require('passport-jwt');
// Database
const db = require('./database/db');

// Test DB
db.authenticate()
  .then(() => console.log('Database connected...'))
  .catch(err => console.log('Error: ' + err))

const app = express();

// Handlebars
app.engine('handlebars', exphbs({ defaultLayout: 'main' }));
app.set('view engine', 'handlebars');

// Body Parser
app.use(bodyParser.urlencoded({ extended: false }));

// Set static folder
app.use(express.static(path.join(__dirname, 'public')));

// Importing files
const routes = require("./routes/route");

app.use("/", routes);


const PORT = process.env.PORT || 5000;

app.listen(PORT, console.log(`Server started on port ${PORT}`));

index.js

    const express = require('express');
    const exphbs = require('express-handlebars');
    const bodyParser = require('body-parser');
    const path = require('path');
    // const passport = require('passport');
    // const passportJWT = require('passport-jwt');
    // Database
    const db = require('./database/db');

    // Test DB
    db.authenticate()
      .then(() => console.log('Database connected...'))
      .catch(err => console.log('Error: ' + err))

    const app = express();

    // Handlebars
    app.engine('handlebars', exphbs({ defaultLayout: 'main' }));
    app.set('view engine', 'handlebars');

    // Body Parser
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(bodyParser.json())

    // Set static folder
    app.use(express.static(path.join(__dirname, 'public')));

    // Importing files
    const routes = require("./routes/route");

    app.use("/", routes);


    const PORT = process.env.PORT || 4500;

    app.listen(PORT, console.log(`Server started on port ${PORT}`));

route.js

const express = require('express')
const router = express.Router()
const bcrypt = require('bcrypt');
const User = require('../models/user')
const jwt = require('jsonwebtoken')
const uuid = require('uuidv4').default;
const secretKey = '321'
router.get('/login', function (req, res) {
    res.render('login')
  })
 router.get('/', function (req, res) {
    res.render('home')
  })
  router.get('/register', function (req, res) {
    res.render('register')
  })
  router.post('/register', function(req,res){
    User.beforeCreate((user, options) => {
        return bcrypt.hash(user.password, 10)
            .then(hash => {
                user.password = hash;
            })
            .catch(err => { 
                throw new Error(); 
            });
    });
    return User.create({
        id: uuid(),
        username: req.body.name,
        password: req.body.password,
        email: req.body.email,
        createdAt: Date.now()
    }).then(function (users) {
        res.send(users);
    }).catch((err)=>{
        console.log(err)
    })
  })
  router.post('/login',  function(req,res){
   User.findOne({
       where:{
            username:req.body.name
       }
   })
   .then(user=>{
       if(user){
           if(bcrypt.compareSync(req.body.password,user.password)){
                let token = jwt.sign(user.dataValues,secretKey,{
                    expiresIn:1440
                })
            res.send(token)
        }
           else {
               res.status(400).json({
                   error:'error exissts'
               })
           }
       }
   })
   .catch(err=>{
       res.status(400).json({err:err})
   })
  })
 module.exports = router

just add app.use(bodyParser.json()) in index.js and define secretKey also add id in user model for primary key and the code working properly

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM