微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用户未在bcrypt.compare定义的NodeJS

如何解决用户未在bcrypt.compare定义的NodeJS


我在 node js 中做了以下事情


1.在mongodb中注册并保存用户 2.注册生成令牌。 3.使用token授权 4.登录用户


这是我的路由器文件


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',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,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,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;

但是当我发出帖子请求时。它说用户未定义在

bcrypt.compare(password,users.password)

请为此找到解决方案。如果这是一个愚蠢或糟糕的问题,我很抱歉。 谢谢

解决方法

您没有确定“用户”,因此您可以将其命名为:

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

//如果存在用户邮箱,则存储找到的用户和小鸡,如果存在则存储小鸡密码

希望能帮到你?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。