节点js api中的JWT令牌生成

时间:2018-05-23 12:39:17

标签: javascript node.js mongodb jwt

我想在我的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
}

请帮助我坚持这个

2 个答案:

答案 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() {...});

没有大括号。