пароль не обновляется nodejs bcrypt - PullRequest
1 голос
/ 01 мая 2020

В следующем коде я использую bcrypt, чтобы иметь sh пароль и сохранить его в пользовательском массиве. После первоначального создания с post => /api/register логин работает правильно и возвращает приветственное сообщение. после обновления пароля новой строкой с сообщением /api/register/1, `пароль действительно обновляется, но вход в систему не удается ни для одного из созданных паролей. Спасибо за поиск.

const express = require("express");
const app = express();

app.use(express.json());
const bcrypt = require("bcrypt");

const users = [];

app.post("/api/register", async (req, res) => {
  // do the registration here

  const user = {
    id: users.length + 1,
    name: req.body.name,
    password: req.body.password,
  };

  const salt = await bcrypt.genSalt(10); 
  user.password = await bcrypt.hash(user.password, salt);
  users.push(user);
  res.send(user);
});
app.post("/api/register/:id", async (req, res) => {
  const user = users.find((u) => u.id === parseInt(req.params.id));
  if (!user) return res.status(404).send("user not found");
  const salt = await bcrypt.genSalt(10); 
  user.password = await bcrypt.hash(user.password, salt);
  res.send(user);
});

app.post("/api/login", async (req, res) => {
  const user = users.find((u) => u.name === req.body.name);
  if (!user) return res.status(404).send("user was not found");
  const validPassword = await bcrypt.compare(req.body.password, user.password);
  if (validPassword) res.send("welcome" + user.name);
  else res.send(user);
});

const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`listening on port ${port}`));

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

после нескольких часов наблюдения за этим я только что нашел свою проблему. bcrypt.ha sh (user.password) должно быть bcrypt.ha sh (req.body.password)

0 голосов
/ 01 мая 2020

Вы обновляете пользовательскую переменную локально, но не обновляете значение в глобальном массиве, поэтому попробуйте это:

app.post("/api/register/:id", async (req, res) => {
  const userIndex = users.findIndex((u) => u.id === parseInt(req.params.id));
  if (!userIndex) return res.status(404).send("user not found");
  const salt = await bcrypt.genSalt(10); 
  users[userIndex].password = await bcrypt.hash(req.body.password, salt);
  res.send(users[userIndex]);
});
...