使用Axios从API获取退货问题

时间:2018-12-24 06:03:03

标签: reactjs jwt axios

我正在尝试从api到我的react组件获取带有jsonwebtoken的令牌,但我无法从客户端获取它,但是我想服务器端的一切似乎都很好。

API:

$ {greeting.get (__${#locale} __)}

这是axios的客户端部分:

router.post("/api/user/login", async (ctx, next) => {
  var nickname = ctx.request.body.data.nickname;
  var password = ctx.request.body.data.password;
  var user = await db.collection("tmp_users").find({nickname: nickname}).toArray();
  var token = "";

  if (user.length > 0) {
    const hashPassword = user[0].password;
    bcrypt.compare(password, hashPassword)
    .then((res) => {
      if (res) {
        jwt.sign({ user: user}, "test", (err, res) => {
          console.log("token GOOD => ", res);
          ctx.body = res;
          return res;
        });
      }
    });
  }
  console.log("token FAILED => ", token);
  ctx.body = token;
  return token;
});

问题是:在哪里可以找到令牌?在服务器端,日志控制台正常。但是客户端我迷路了,我找不到它。

也许我什么都没得到? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

它不返回任何值,因为您正在返回异步的promise内部。 我已经写了bcrypt / jwt库提供的用于同步操作的另一种方法。

router.post("/api/user/login", async (ctx, next) => {
  var nickname = ctx.request.body.data.nickname;
  var password = ctx.request.body.data.password;
  var user = await db.collection("tmp_users").find({nickname: nickname}).toArray();
  var token = "";
  if (user.length > 0) {
    const hashPassword = user[0].password;
    const res = await bcrypt.compare(password, hashPassword);
    if (res) {
      const jwttoken = await jwt.sign({ user: user}, "test")
      console.log("token GOOD => ", jwttoken);
      ctx.body = jwttoken;
      return jwttoken;
    }
  }
  return new Error("Error");
});