Проблема при вызове метода хеширования

#javascript #node.js #express #hash #bcrypt

#javascript #node.js #выразить #хэш #bcrypt

Вопрос:

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

server.js

 const mongoose = require("mongoose");
const express = require("express");
const cors = require("cors");
const passport = require("passport");
const passportLocal = require("passport-local").Strategy;
const cookieParser = require("cookie-parser");
const bcrypt = require("bcrypt");
const session = require("express-session");
const bodyParser = require("body-parser");
const app = express();
const User = require("./user")

mongoose.connect(
    mongodbLink,
    {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    },
    () => {
        console.log("Mongoose Is Connected");
      }
);
// Middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(
  cors({
    origin: "http://localhost:3000", // <-- location of the react app were connecting to
    credentials: true,
  })
);
app.use(
  session({
    secret: "secretcode",
    resave: true,
    saveUninitialized: true,
  })
);
app.use(cookieParser("secretcode"));
app.use(passport.initialize());
app.use(passport.session());

//routes

app.post('/login',(req,res,next) => {
   passport.authenticate("local",(err,user,info) =>{
       if (err) throw err
       if(!user) res.send("No user with given login")
       else {
           req.logIn(user, (err) => {
               if (err) throw err
               res.send("Succesfully Authenticated")
               console.log(req.user)
           })
       }
   })(req,res,next)
})

app.post("/register", (req, res) => {
    User.findOne({ username: req.body.username }, async (err, doc) => {
      if (err) throw err;
      if (doc) res.send("User Already Exists");
      if (!doc) {
        const hashedPassword = bcrypt.hashSync(req.body.password, 10);
  
        const newUser = new User({
          username: req.body.username,
          password: hashedPassword,
        });
        await newUser.save();
        res.send("User Created");
      }
    });
  });
app.get('/user',(req,res) => {
    res.send(req.user)
})


//listen

app.listen(4000, () => {
    console.log("Server Has Started");
  });

 

User.js

 const user = new mongoose.Schema({
    username: String,
    password: String,
})

module.exports = mongoose.model("User",user)
 

Мой post-запрос post от post-post на http://localhost:4000/register

 {
    "username":"user123",
    "password":"pass",
}
 

У меня есть это сообщение об ошибке в консоли, когда я тестирую свой маршрут регистрации с помощью postman, и я не могу получить никакого ответа.

 (node:5452) UnhandledPromiseRejectionWarning: Error: data and salt arguments required
    at Object.hashSync (C:UsersPCDesktopprojectsmern_loginbackendnode_modulesbcryptbcrypt.js:91:15)
    at C:UsersPCDesktopprojectsmern_loginbackendserver.js:64:39
    at C:UsersPCDesktopprojectsmern_loginbackendnode_modulesmongooselibmodel.js:4866:16
    at C:UsersPCDesktopprojectsmern_loginbackendnode_modulesmongooselibmodel.js:4866:16
    at C:UsersPCDesktopprojectsmern_loginbackendnode_modulesmongooselibhelperspromiseOrCallback.js:24:16   
    at C:UsersPCDesktopprojectsmern_loginbackendnode_modulesmongooselibmodel.js:4889:21
    at C:UsersPCDesktopprojectsmern_loginbackendnode_modulesmongooselibquery.js:4399:11
    at C:UsersPCDesktopprojectsmern_loginbackendnode_moduleskareemindex.js:136:16
    at processTicksAndRejections (internal/process/task_queues.js:79:11)
(node:5452) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:5452) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

 

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

Ответ №1:

Похоже req.body.password , это undefined вызывает ошибку.

Проверьте, отправляется ли пароль в теле запроса.

Комментарии:

1. Да, он передает его. Проблема заключается в том, что когда я пытаюсь зарегистрировать пользователя без хеширования, все работает хорошо

2. Ну, это не так. Я только что заглянул в свою базу данных, и даже если я создал пользователя, он существует без имени пользователя и пароля, я не знаю почему. я обновил свой пост с помощью своего пользовательского кода

3. Можете ли вы опубликовать код интерфейса, создающий запрос? Похоже, он не отправляет password тело запроса.

4. У меня еще нет интерфейса. Я использую postman для тестирования запросов. Я отправил свой запрос postman

5. Ну, я исправил свою проблему, узнав, как я просто пробовал случайные решения. Вероятно, у меня была какая-то проблема с синтаксическим анализом или заголовками postman. Спасибо, что пытались мне помочь.