сравнение паролей с bcrypt не работает - PullRequest
0 голосов
/ 30 сентября 2019

Я довольно новичок в выражении. Я хочу сделать приложение для входа в систему, пока я выполнил регистрацию, но в приложении для входа я хочу сделать сравнение между паролем в базе данных и паролем, предоставленным пользователем, и сравнить его. с bcrypt, так как я использую его для шифрования пароля, но он не делает сравнения, чего мне не хватает здесь

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

модели

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

индекс

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}`));

1 Ответ

0 голосов
/ 30 сентября 2019

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

просто добавьте app.use(bodyParser.json()) в index.js и определитеsecretKey также добавьте идентификатор в модель пользователя для первичного ключа и код работает правильно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...