简体   繁体   English

如何使用 bcrypt 在寄存器中散列的密码检查登录密码?

[英]How to check check the password from login with the password hashed by bcrypt in register?

I'm trying to create a signup/login page.我正在尝试创建一个注册/登录页面。 I'm using Nodejs, pug, mongoose, bcrypt.我正在使用 Nodejs、哈巴狗、mongoose、bcrypt。 I'm storing the password from the register or sign up page to the database after hashing it.我在散列后将密码从注册或注册页面存储到数据库中。 I'm unable to use我无法使用

const user= new login.findone({email: req.body.email})
if(user){
   bcrypt.compare(myPlaintextPassword, hash, function(err, result) {
    // result == true
});
}

as this gives me a false result.因为这给了我一个错误的结果。 I also believe that the findOne({email: req.body.email}) is not working correctly or there is some error in there too.我也相信 findOne({email: req.body.email}) 工作不正常,或者那里也有一些错误。

Here is the index page handling these validations这是处理这些验证的索引页面

 const express = require('express'); const {check, validationResult} = require('express-validator'); const router = express.Router(); const bcrypt = require('bcrypt'); const saltRounds = 10; //Mongoose const mongoose = require('mongoose'); var registration = require('../models/registrations') //Important var login = require('../models/login') //Important var blogpost = require('../models/blog') //Routes //-----------------------------------------------------------------------------------------------------------REGISTER/SIGN UP router.get('/', (req,res)=>{ res.render('./home.pug') }) router.get('/register', (req, res) => { res.render('register',{ title: 'Register' }); }); router.post('/register', [ check('name').isLength({ min: 5 }).withMessage('> Please enter a name'), check('email').isLength({min: 14}).withMessage('> Please enter an email'), check('password').isLength({min:6}) ],(req, res) => { const errors = validationResult(req); var salt = bcrypt.genSaltSync(saltRounds); var hash = bcrypt.hashSync(req.body.password, salt); var emailcheck = registration.findOne({email: req.body.email}) emailcheck.then(emailcheck => { if (emailcheck){ res.render('register', {emailERROR: '> Email already in use,\n': data. req,body.}) }else{ if (errors:isEmpty()) { const regis = new registration({ name. req.body,name: email. req.body,email: password, hash; }). regis.save().then(() => { res,render('register': {successMSG, '> Succesfully Registered:'. data, req.body.}) console.log(regis) });catch((err) => { console.log(err). res;send('Sorry. Something went wrong.'), })} else { res:status(422),render('register': {title. 'Registration form', errors: errors.array(), data; req.body.}). } } }) console,log(req,body) }) //Register-xxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxx-xxx //-------------------------------------------------------------------------------------------LOGIN router.get('/login', (req: res) => { res;render('login';{ title. 'Login' }), }), router;post('/login'. (req, res) => { //Empty }), //Login-xxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxx-xxx //-------------------------------------------------------------------------------------------BLOG router.get('/blog', (req: res) => { res;render('blog';{ title. 'Blog' }), }), router.post('/blog'. (req. res) => { const bp= new blogpost(req.body) bp,save():then(()=>{ res;render('blog'. {successMSG,'>Succesfully Posted,'}) }) }). //Blog-xxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxx-xxx router,get('/about': (req; res) => { res;render('about'.{ title; 'About' }); }); module.exports = router;

bcrypt.compare(myPlaintextPassword, hash, function(err, result) {}

Can you elaborate on what you've entered as a value of hash here?您能否详细说明您在此处输入的 hash 值? If everything has gone correctly up to here then below code should work correctly for you.如果一切正常到这里,那么下面的代码应该适合你。

const user= new login.findone({email: req.body.email})
if(user){
   console.log(user.password) // Check to see if password from database is returned as expected or not
   bcrypt.compare(myPlaintextPassword, user.passsword, function(err, result) {
       // Your codes
   });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Node js - ejs:如何在登录/注册表单上运行密码检查 - Node js - ejs: How to run password check on login/register form 我正在使用 bcrypt 创建登录 api 和散列密码 - i am creating login api and hashed password using bcrypt 从数据库中检索散列的 PHP 密码并检查 Javascript 中提交的密码 - Retrieve hashed PHP password from database and check against a submitted password in Javascript bcrypt.js 如何知道散列密码与明文密码相同? - How can bcrypt.js know that the hashed password is the same as the plain text password? 检查登录用户名和密码,然后从以前的每个条目中获取数据 - Check for login username and password, and then bring data from every previous entry 需要检查登录用户名和密码,然后从以前的条目中获取数据 - Need to check for login username and password, and then bring data from previous entries 如何使用散列 bcrypt 版本更新数据库中的每个密码? - How Can I update each password in my database with hashed bcrypt version? 如何使用散列的 php 密码登录反应本机应用程序? - How to login react native app with hashed php password? 如何使用确认密码字段检查密码字段 - how to check password field with confirm password field 在登录表单(jQuery)中检查用户名和密码 - Check username and password in Login Form (jQuery)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM