简体   繁体   English

用户未在 bcrypt.compare 的 nodejs 中定义

[英]users is not defined in nodejs at bcrypt.compare


I am doing the following thing in node js我在节点 js 中做以下事情


1.register and save user in mongodb 2.generate token when registered. 1.注册并保存用户到mongodb 2.注册时生成token。 3.authorization using token 4.login user and 3.authorization using token 4.login user and


this is my router file这是我的路由器文件


const express = require('express');
const router = express.Router();
const User = require('../models/user');
const bcrypt= require('bcryptjs');
const use_jwt = require('../middleware/use_jwt.js')
const jwt = require('jsonwebtoken');
const user = require('../models/user');
//const user = require('../models/user');
const env = require ('dotenv').config();
router.get('/',use_jwt , async(req,res,next)=>{
    try{
        const user_id = req.user.id;
        const user2 = await User.findById(user_id).select('-password');
        res.status(200).json({
            success:true,
            user:user2
        })
        
    }
    catch(err){
        console.log(err);
        res.status(401).json({
            msg:"server not responding"
            
        })
        
    }
    next();
})



router.post('/register',async(req,res,next)=>{
    const  {username,email,password}=req.body;
    try{
        let user_exist = await User.findOne({email:email});
        if(user_exist){
            return res.status(401).json({
            "success":"false",
            "msg":"user already exist"
            })
        } 
            //importing data to models
            const users = new User();
            users.username = username;
            users.email = email ;
            console.log(users.email);
            console.log(password)
            const salt = await bcrypt.genSalt(10);
            users.avatar =  "https://gravatar.com/avatar/?s=200&d=retro"
            users.password =  await bcrypt.hash(password,salt)
            
            console.log(users.password);
            console.log("hello");
            await users.save();
            const payload = {
                user :{
                    id:users.id
                } 
            }
            console.log(payload.user.id);
            jwt.sign(payload,process.env.jwtUsersecret,{
                expiresIn : 3600000
            },(err,token)=>{
                if(err) throw err;
                else {
                    res.status(200).json({
                        success:true,
                        token:token
                    })
                }
            })
            next();
    } 
    catch(err){
        console.log(err);
    }
});

router.post('/login',async (req,res,next)=>{
    const email = req.body.email
    const password = req.body.password
    console.log('hello2')
    console.log(password)
    console.log('hello1')

    try{
        const user_exist = User.findOne({email:email})
        
        if(!user_exist){
            console.log('one user tried to login without registering')
            res.status(400).json({
                "msg":"pls register and then try to login because there is no such user",
                "sucess":"false"

            })
            
         }
        
            //console.log(user)
            
            
            bcrypt.compare(password, users.password, (err, res) => {
                if (err) throw err;
                if (res) {(req,res)=>{
                    const payload = {
                        user: { 
                            id: users.id
                        }
                    }
                    console.log(payload.user.id);
                    token = jwt.sign(payload,process.env.jwtUsersecret)
                    res.status(200).json({
                        "sucess": "true",
                        "user": user,
                        "email": email,
                        "token": token
                    });
                }
            }
                else {
                    res.json({
                        "success": "false",
                        "msg": "password incorrect"
                    });
                }
                
            })
        }
                
        catch(err){
        console.log(err);
        res.status(400).json({
            "msg":"server not responding"

        })
    }
})
module.exports = router;

but when i give post request.但是当我提出发布请求时。 It says users is not defined at它说用户未定义在

bcrypt.compare(password,users.password)

pls find an solution for this.请为此找到解决方案。 I am sorry if it is a silly or bad question.如果这是一个愚蠢或糟糕的问题,我很抱歉。 thanks谢谢

You didn't identify "Users" so you can chick as:您没有识别“用户”,因此您可以小鸡:

User.findOne({email: email}, (err, user)
> {  
> if(err) throw err;
> if(!user){ 
>    console.log("User dose not exisit") 
>  }
> bcrypt.compare(password, user.password , (err, result) => {
>           if (err) throw err;
>           if (result === true) {
>            //User Is Found and password match
>           } else {
>            //User Password dose not match
>           }
>      });
> 
> })

//It will store found user and chick if user email existed if yes it will chick password //如果用户email存在,它将存储找到的用户和小鸡,如果是,它将小鸡密码

I hope that helps我希望这会有所帮助

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM