如何解决用户未在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 举报,一经查实,本站将立刻删除。