我想在我的API中实现JWT令牌,我已经在MongoDB集合中创建了用户的用户登录,我想通过登录页面对其进行身份验证,截至目前我正在检查POSTMAN但是我无法生成一个请有人帮忙
以下是我的代码: -
1)server.js
const jwt = require(' jsonwebtoken'); //用于创建,签署和验证令牌
const logger = require('morgan');
const mongoose = require("mongoose");
mongoose.Promise = global.Promise;
mongoose.connect("mongodb://localhost:27017/saddleHorseacademy");
process.env.SECRET_KEY = "SaddleHorseKey";
app.post('/loginUser',(request,response)=>{
var user = {
userName : request.body.userName,
password : request.body.password
}
userList.findOne({user},function(error,user){
if(error){
console.log(error);
return response.status(500).send("unable to sign in");
}
if(!user){
return response.status(404).send("not user found");
}
else{
var token = jwt.sign(user,process.env.SECRET_KEY,{
expiressInMinutes:1440
});
return response.json({
success:true,
Message:'Check your token!',
token: token
});
}
})
});
当我试图用邮递员命名时,格式为: -
{
"userName":"mayank_9",
"password":"saddle09"
}
它返回响应而不是用户查找但在我的数据库中我有这样的数据
{
"_id" : ObjectId("5ac48ba8034cf044c0832ea9"),
"userName" : "mayank_9",
"password" : "saddle09",
"__v" : 0
}
请帮助我坚持这个
答案 0 :(得分:0)
find
方法正在使用shorthand assignment查询对象{user}
,该对象会创建以下对象:
{
user: {
userName: 'mayank_9',
password: 'saddle09'
}
}
因此find
正在尝试将具有该对象的user
属性的对象与值匹配。我假设这不是集合中记录的结构,因此找不到匹配项。直接传递对象将避免这种情况:
userList.findOne(user, function (err, user) {...});
答案 1 :(得分:0)
您应该使用:
.findOne(user, function() {...});
没有大括号。