[英]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.