我正在尝试从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;
});
问题是:在哪里可以找到令牌?在服务器端,日志控制台正常。但是客户端我迷路了,我找不到它。
也许我什么都没得到? 谢谢你的帮助!
答案 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");
});