【问题标题】:JWT token generation in node js api在节点 js api 中生成 JWT 令牌
【发布时间】:2018-11-02 11:02:59
【问题描述】:

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

请帮我解决这个问题

【问题讨论】:

  • 请显示邮递员的屏幕截图

标签: javascript node.js mongodb jwt


【解决方案1】:

find 方法将shorthand assignment 用于查询对象{user},从而创建以下对象:

{
  user: {
    userName: 'mayank_9',
    password: 'saddle09'
  }
}

因此,find 试图将对象与具有该对象作为值的user 属性进行匹配。我认为这不是您集合中记录的结构,因此它不会找到匹配项。直接传递对象会避免这种情况:

 userList.findOne(user, function (err, user) {...});

【讨论】:

  • 我试过了,但是当我尝试调试它时它仍然说没有找到用户 userList.findOne(user ) 它有用户名和密码信息,但最终在按下 F8 后它变成了用户:null
  • @MayankPurohit 哪个user?您对查询对象和返回值都使用user。此外,使用这些值直接查询您的数据库以查看它是否返回记录。
  • 作为返回值的用户我已将用户对象更改为用户凭据,并且它也开始给出错误有效负载应该是普通对象
  • @MayankPurohit 只要集合中的记录看起来像您帖子中的记录并且查询对象与某些值匹配,那么它应该返回匹配的记录。查询对象不匹配(例如拼写错误、编码问题等)或正在查询错误的集合。不过,使用速记赋值的原始问题绝对是个问题。
【解决方案2】:

你应该使用:

.findOne(user, function() {...});

没有大括号。

【讨论】:

  • 尝试记录 req.body 以检查键/值对是否正确
猜你喜欢
  • 2019-10-08
  • 1970-01-01
  • 2018-12-26
  • 2020-06-26
  • 2018-08-29
  • 2021-07-29
  • 2019-11-12
  • 1970-01-01
  • 2020-05-15
相关资源
最近更新 更多