Как я могу проверить, совпадает ли пароль пользователя с пользователем, введенным при вводе oldPassword? - PullRequest
0 голосов
/ 29 июня 2019

Итак, я хочу проверить, совпадает ли пароль пользователя с паролем, введенным пользователем в поле ввода «oldPassword». Проблема, которую я имею, состоит в том, как я должен проверить, потому что, очевидно, я должен хешировать, что пользователь ввел в поле ввода "oldPassword". Как я могу сделать это, и, пожалуйста, также проверьте мой файл ejs и что вы думаете? Я также получил новый пароль, ЭТО ДЛЯ ПОЛЬЗОВАТЕЛЯ, ЧТОБЫ ИЗМЕНИТЬ СТАРЫЙ ПАРОЛЬ НОВОМУ ПУТИ *

exports.postChangedPassword = async (req, res) => {
            const {
                oldPassword,
                newPassword,
                confirmNewPassword
            } = req.body;

            try {
                const userId = await req.params.userId;
                const user = await User.findById(userId)

                const oldHashedPassword = await bcrypt.hash(oldPassword, 10);

                if (user.password === oldHashedPassword && newPassword === confirmNewPassword) {
                    const hashedPassword = await bcrypt.hash(newPassword, 10);
                    user.password = hashedPassword;
                    user.save();
                    console.log(user);
                    res.render("admin/settings/appliedSettings/changed-password", {
                        pageTitle: "Succesfully Changed Password",
                        path: "/settings/changed-password",
                        user: user
                    })
                }
            } catch (error) {
                console.log(error);
                req.flash("error", "Password do not match!");
                res.redirect("/settings/password");

            }
        }

model.js

const mongoose = require("mongoose"),
    Schema = mongoose.Schema,
    bcrypt = require("bcryptjs");




const postSchema = new Schema({
    title: String,
    description: String,
    context: String,
    author: {
        type: Schema.Types.ObjectId,
    }
});


const userSchema = new Schema({
    name: {
        type: String,
        required: true
    },

    email: {
        type: String,
        required: true,
    },

    password: {
        type: String,
        required: true
    },

    posts: [postSchema]
});


userSchema.pre("save", async function save(next) {
    const user = this;
    if (!user.isModified("password")) return next();
    const hashedPassword = await bcrypt.hash(user.password, 10);
    user.password = hashedPassword;
    next();
});


const Post = mongoose.model("Post", postSchema);
const User = mongoose.model("User", userSchema);

module.exports = {
    User,
    Post
}

Сменная password.ejs

    <% if (errorMessage) { %>
        <div class="user-message-error"> <%= errorMessage %> </div>
        <% } %>
    <form class="change-password" action="/settings/changed-password/<%=user._id%>" method="POST">
        <label for="password">Old Password</label>
        <input type="password" name="oldPassword" placeholder="Enter Your Old Password ..." required>
        <label for="password">Your New Password</label>
        <input type="password" name="newPassword" placeholder="Enter Your New Password ..." required>
        <label for="password">Confirm Your New Password</label>
        <input type="password" name="confirmNewPassword" placeholder="Confirm Your Password ..." required>
        <input type="hidden" name="_csrf" value="<%= csrfToken %>">
        <button type="submit">
            Submit Password
        </button>
    </form>

административный маршрут

router.post("/settings/changed-password/:userId", adminController.postChangedPassword);

1 Ответ

0 голосов
/ 29 июня 2019

Чтобы проверить, изменился ли пароль, просто хешируйте новый пароль и сравните хешированное значение со старым:

const oldHashedPassword = await bcrypt.hash(oldPassword, 10);
const newHashedPassword = await bcrypt.hash(newPassword, 10);
if (
    user.password === oldHashedPassword &&
    newPassword === confirmNewPassword &&
    oldHashedPassword !== newHashedPassword
) {
  user.password = newHashedPassword;
  user.save();
  console.log(user);
  res.render("admin/settings/appliedSettings/changed-password", {
    pageTitle: "Succesfully Changed Password",
    path: "/settings/changed-password",
    user: user
  })
}

Не имеет значения, проверяете ли вы по user.password или oldHashedPassword, поскольку вы установили, что они являются одним и тем же в первом условии

...